一、session

作用:解决了一个用户的不同请求处理的数据共享问题

原理:用户第一次访问服务器,服务器创建一个session对象给此用户,并将session对象的JSESSIONID用cookie技术存入浏览              器端,保证用户的其他请求能够获取到同一个session对象,保证了不同请求能获取到共享的数据。

特点:由服务器创建,存在服务器端,依赖cookie技术。

           临时存在cookie中(关闭浏览器cookie失效,JSESSIONID失效),有效期是一次会话。

           session默认存储30分钟(超时JSESSIONID失效)。

              失效处理:用户请求中的JSESSIONID和后台获取到的session的Jsessionid比较

                  (例如登录后30分钟没有任何操作,自动退出,session失效,就要重新让用户登录)

使用: (1)创建session对象,也是获取session对象

              HttpSession hs=req.getSession();

             (2)设置session存储时间
                hs.setMaxInactiveInterval(int  seconds);//秒

              (3)强制session失效,比如注销登录时
                 hs.invalidate();

          1.如果请求中有session的标识符即JSESSIONID,则返回对应的session对象。

          2.如果请求中没有session的标识符即JSESSIONID,则创建新的session对象,并将其JSESSIONID作为cookie数据返回

          3.如果session对象失效,也会重新创建session对象,并将JSESSIONID存储在浏览器内存

//失效时间是距离最后一次使用的时间,不是初始设置时间
              (4)存储数据
                      hs.setAttribute(String name, Object  value);//键-值               (5)在另一个servlet中获取session信息
                      hs.getAttribute(String name);//返回数据类型为Object
         hs.setAttribute("name", name);//键-值
        //获取session信息
        HttpSession hs=req.getSession();
        System.out.println("SessionServlet2:"+hs.getId());
        //得到SessionServlet存入session中的信息
        System.out.println("SessionServlet2:"+hs.getAttribute("name"));//键名

 注意:存储的动作和取出的动作可以发生在不同请求中,存储要先于取出执行

二、ServletContext对象

作用:解决了不同用户的数据共享问题。

原理:ServletContext对象由服务器进行创建,一个项目只有一个,不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也是同一个对象,该对象由用户共同拥有。(统计网站总登录人数)

生命周期:服务器启动到服务器关闭。

使用:
       1.获取ServletContext对象
           //方式1
            ServletContext sc1=this.getServletContext();
            //放式2
            ServletContext sc2=this.getServletConfig().getServletContext();
            //方式3
            ServletContext sc3=req.getSession().getServletContext();       2.使用ServletContext对象完成数据共享
          //数据存储
                      sc1.setAttribute(String  name, object  value);//键-值          //数据获取
                     sc1.getAttribute(String  name);//返回Obiect类型
        (用户可以做存操作,也可以做取操作,获取的数据不存在返回NULL,)        3. 获取项目中web.xml文件中的全局配置数据
               作用:将web.xml文件中的静态数据解耦

   <?xml version="1.0" encoding="UTF-8"?> 
 
 <web-app version="2.5"  
 
     xmlns="http://java.sun.com/xml/ns/javaee"  
 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
 
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
     
 
   <!-- 配置全局数据 --> 
 
   <context-param>  <!-- 一个标签里配一个键值对--> 
 
          <param-name>name</param-name> 
 
        <param-value>libai</param-value> 
 
   </context-param> 
//获取项目web.xml的全局配置数据
       String name= sc1.getInitParameter("name");//根据键的名字返回string类型的值,没有为NULL
              sc1.getInitParameterNames();//返回键名的枚举
               4.获取项目webroot下资源的绝对路径
  String path=sc1.getRealPath("/doc/1.txt");//只要写webroot之后的路径
           System.out.println(path);  //输出D:\tomcat\webapps\sc\doc\1.txt
            5.获取webroot下的资源流对象
        InputStream is= sc1.getResourceAsStream("/doc/1.txt");
  (只能获取webroot根目录下的资源流对象,class文件的流对象需要使用类加载器获取。) 
三、ServletConfig对象
作用:是servlet的专属配置对象,每个servlet都单独拥有一个servletconfig对象,用来获取web.xml中的配置信息。
使用:
         获取ServletConfig对象
         获取web.xml中的配置数据
    //获取servletconfig对象
         ServletConfig sc=this.getServletConfig();
         //获取web.xml配置
         String config=sc.getInitParameter("config");配置web.xml
  <servlet>
     <description>This is the description of my J2EE component</description>
     <display-name>This is the display name of my J2EE component</display-name>
     <servlet-name>ServletConfigServlet</servlet-name>
     <servlet-class>ServletConfigServlet</servlet-class>
                          <!--内部配置-->
               <init-param>
                           <param-name>config</param-name>
                          <param-value>utf-8</param-value>
               </init-param>
     
   </servlet>
  四、web.xml使用总结 
作用:存储项目和相关的配置信息,保护Servlet,解耦一些数据对程序的依赖
使用位置:每个web项目中--->局部配置,针对本项目
                 Tomcat服务器中--->全局配置,配置公共信息
核心组件(内容):
                                全局上下文配置(全局配置,context-param)
                                Servlet配置
                                过滤器配置
                                监听器配置
 加载顺序:ServletContext  →  context-param -->  listener--->  filter-->Servlet加载组件
加载时机:服务器启动
五、server.xml文件
   
 <Server>
     <Service>
         <Connector/>端口号
         <Connector/>
         <Engine>引擎
             <Host>
                 <Context/>热部署
             </Host>
         </Engine>
     </Service>
 </Server>