您的位置:首页 > 编程语言 > Java开发

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

2017-11-01 19:29 295 查看
/*
*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()来获取
*/




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: