javawebday19(Servlet细节和获取ServletContext的四种方法)

本文详细介绍了Servlet的概念,包括有状态和无状态对象的区别、线程安全问题、URL模式匹配、web.xml配置以及ServletContext对象的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 *Servlet细节
 * 不要在Servlet中创建成员 创建局部变量即可
 * 可以创建无状态成员
 * 可以创建有状态的成员 但状态必须为只读的
 *3、有状态和无状态对象
 * 有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。
 *在不同方法调用间不保留任何状态。其实就是有数据成员的对象。
 * 无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象。不能保存数据,是不变类,是线程安全的。
 *具体来说就是只有方法没有数据成员的对象,或者有数据成员但是数据成员是可读的对象。
 *Servlet与线程安全
 *  因为一个类型的Servlet只有一个实例对象 那么就有可能会出现一个Servlet同时处理多个请求 
 *那么Servlet是否是线程安全的? 不是线程安全的 因此Servlet的工作效率很高 但也存在线程安全问题
 *  所以不应该在Servlet中直接创建成员变量 因为可能会存在一个线程对这个成员变量进行写操作 
 *另一个线程 对这个成员变量进行读操作
 *
 *让服务器在启动时就创建Servlet
 *  默认情况下 服务器会在某个Servlet第一次收到请求时创建它 也可以在web.xml中对Servlet进行配置 使服务器启动时就创建Servlet
 *在web.xml中的<servlet> 中加入<load-on-startup>0</load-on-startup> 配置要求非负整数
 *
 *<url-pattern>
 *<url-pattern><servlet-mapping>的子元素 用来指定Servlet的访问路径 即url 它必须是以/开头
 * 可以在<servlet-mapping>中给出多个<url-pattern>
 * <servlet-mapping>
 *  <servlet-name>AServlet</servlet-name>
 *  <url-pattern>/AServlet</url-pattern>
 *  <url-pattern>/BServlet</url-pattern>
 * </servlet-mapping>
 * 说明一个Servlet绑定了两个URL无论访问/AServlet或/BServlet 访问的都是AServlet
 * 
 *  还可以在<url-pattern>中使用通配符 所谓通配符就是*星号可以匹配任何URL前缀或后缀 使用通配符可以命名一个Servlet绑定一组URL 例如
 *  <url-pattern>/servlet/*</url-pattern> /servlet/a 、/servlet/b 都匹配/servlet/*  路径匹配
 *  <url-pattern>*.do</url-pattern> /abc/a/g.do 、/a.do 都匹配*.do  扩展名匹配
 *  <url-pattern>/*</url-pattern>匹配所有URL                            全匹配
 *通配符要么为前缀 要么为后缀 不能在URL中间位置 也不能只有通配符 而且一个URL中最多只能出现一个通配符
 *  /*.do错误 因为在中间
 *  通配符是一种模糊匹配URL的方式 如果存在更具体的<url-pattern>那么访问路径回去匹配具体的<url-pattern>
 *
 *web.xml 文件的继承
 *在${CATALINA_HOME}\conf\web.xml 中的内容相当于写到了每个项目的web.xml中 是所有web.xml的父文件
 *每个完整的javaweb应用中都需要有web.xml但我们不知道所有的web.xml文件都有一个共同的父文件 在tomcat的conf/web.xml路径
 *  <servlet-name>default</servlet-name> 优先级最低 如果一个请求没有人处理 那么他来处理 显示404
 *  <url-pattern>/</url-pattern>
 *MIME类型用来标识网络上资源的媒体类型
 *在应用的web.xml中如果没有对<welcome-file-list>进行覆盖 那么默认主页为index.html index.htm index.jsp
 *
 *ServletContext
 *一个项目只有一个ServletContext对象
 *可以在N多个Servlet中来获取这个唯一的对象 使用它可以给多个Servlet传递数据
 *天地同寿 对象在Tomcat启动时就创建 在Tomcat关闭时才会死去
 *
 *ServletContext概述
 * 服务器会为每个应用创建一个ServletContext对象
 * ServletContext对象的创建是在服务器启动时完成的
 * ServletContext对象的销毁是在服务器关闭时完成的
 *  ServletContext对象的作用是在整个Web应用的动态资源之间共享数据 例如在AServlet中向ServletContext对象中保存一个值 
 *然后在BServlet中就可以获取这个值 就是共享数据
 *
 *获取ServletContext
 *ServletConfig#getServletContext()
 *GenericServlet#getServletContext()
 *HttpSession#getServletContext()
 *ServletContextEvent#getServletContext()
 *
 *在Servlet中获取ServletContext对象
 * 在void init(ServletConfig config)中 ServletContext context = config.getServletContext();
 *ServletConfig类的getServletContext()方法可以用来获取ServletContext对象
 *在GenericServlet或getServletContext中获取ServletContext对象
 * GenericServlet类有ServletContext()方法 所以可以直接用this.getServletContext()来获取 
 */

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值