Servlet(3)--session,ServletContext,ServletConfig

一、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>

发布了19 篇原创文章 · 获赞 0 · 访问量 580

猜你喜欢

转载自blog.csdn.net/qq_44617005/article/details/103434069