Servlet中重要对象详解(ServletContext,HttpSession等)

ServletContext

什么是Servlet上下文?

  Servlet上下文又叫做:ServletContext。容器启动之后,容器会为每个web应用创建一个实现了ServletContext接口要求的对象,该对象就称之为servlet上下文。

  当WEB服务器启动时,会为每一个WEB应用程序(webapps下的每个目录就是一个应用程序)创建一块共享的存储区域。

  ServletContext也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。

 

ServletContext特点:

  1、ServletContext生命周期:在WEB服务器启动时创建,服务器关闭时销毁。

  2、唯一性,一个web应用对应一个servlet上下文

  3、一直存在,只要容器没有关闭,应用没有被卸载,servlet上下文就会一直存在。

 

如何获取Servlet上下文?

  GenericServlet,ServletConfig,HttpSession,FilterConfig都提供了一个方法getServletContext()来获得Servlet上下文。

  //通过当前Servlet类的对象,得到与它关联的ServletContext对象,也就是上下文
      ServletContext application = this.getServletContext();

 

ServletContext上下文作用:

  1、绑定数据

    setAttribute,removeAttribute,getAttribute在满足使用条件情况下,优先使用生命周期短的(request<session<ServletContext)

  2、读取全局的初始化参数

    首先在web.xml中这么配置

    <!-- 配置全局的初始化参数 -->
    <context-param>
      <param-name>company</param-name>
      <param-value>网易雷火游戏</param-value>
    </context-param>
 
 
HttpSession(私有区域) 与 ServletContext(公共区域) 的区别是什么?
1、作用范围不同:HttpSession是针对每一个客户端浏览器单独有一个。
         ServletContext是针对每一个WEB应用程序有一个
2、存活时间不同:HttpSession第一次访问服务器,服务器端调用request.getSession()时创建,访问间隔时间超过30分钟就销毁。
         ServletContext服务器启动时创建,服务器停止时销毁。
 
 
 
 
HttpSession  
什么是HttpSession?
  服务器端为保存状态而创建的一个特殊的对象。
 
HttpSession的原理:
  浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的ID,一般称之为sessionId),服务器会将这个sessionId发送给浏览器(默认以cookie方式发送),浏览器会将sessionId保存下来(在内存中);当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId找到对应的session对象。
 
如何获取HttpSession?
  HttpSession s=request.getSession(boolean flag)
    flag为true时,先查看请求当中有没有sessionId,若没有,则创建session对象;若有,则依据该sessionId去查找对应的session对象(找到就返回,找不到就创建一个新的session对象)
    flag为false时,先查看请求当中有没有sessionId,若没有,不创建session对象;若有,则依据该sessionId去查找对应的session对象(找到就返回,找不到就返回null)
    flag为空时,HttpSession s=request.getSession()等价于上面参数为true时

 

 HttpSession何时被创建,何时被销毁呢?

创建:第一次请求服务器,服务器端的Servlet调用了 request.getSession()方法时被创建。

销毁:如果浏览器间隔时间超过30分钟没有访问服务器,则服务器会销毁对应的HttpSession对象。(默认30分钟是可以配置的。)

<session-config>
  <session-timeout>30</session-timeout>
</session-config>
  
  
 
 

posted @ 2019-08-16 15:11  但偏偏  阅读(1631)  评论(0编辑  收藏  举报