request session application


2.request session application
    2.1 这三种对象可以在服务器内部帮我们保存数据以及传递数据.
                  类型(接口)                                       对象名
           HttpServletRequest                           request
           HttpSession            session
           ServletContext                                   application

    2.2 doGet或者doPost中怎么拿到这三种对象
        request对象
            在doGet或者doPost方法的参数中
        session对象
            HttpSession session = request.getSession();
        application对象
            request.getServletContext();
            或者
            this.getServletContext();
            或者
            request.getSession().getServletContext();
            或者
            this.getServletConfig().getServletContext();

        注意:无论哪一种方式,拿到的都是同一个application对象

    2.3    这三种对象的生命周期及作用范围
        request对象
            生命周期:
                客户端每次发请求,服务器就会创建一个新的request对象,本次访问结束后,该request对象就会被销毁
            作用范围:
                使用request存/取数据只能在一次请求之内起作用.比如服务器内部跳转的时候(因为内部跳转客户端只发一次请求).
            注意:客户端重定向是不行的,因为客户端重定向会发出多个请求(多个新的request对象).

        session对象 (会话)
            获得session对象的三种方式:

            //如果request有对应的session,则返回这个session,如果request没有对应的session,则创建一个新的session并返回
            HttpSession session = request.getSession(true);

            //如果request有对应的session,则返回这个session,如果request没有对应的session,则返回null
            HttpSession session = request.getSession(false);

            //等同于request.getSession(true);
            HttpSession session = request.getSession();

            生命周期:
                getSession()方法第一次被调用时创建session对象。

                session.invalidate()调用的时候会销毁session

                session如果自动超时的话,也会被销毁
                session默认超时时间为30分钟
                session的超时时间可以在代码中设置或者在web.xml中设置
                    代码中设置:session.setMaxInactiveInterval(5); 5秒

                    web.xml中设置:
                        1分钟超时,负数或者0为不限制时间
                        <session-config>  
                            <session-timeout>1</session-timeout>  
                        </session-config>
                session超时时间是指:客户端不与服务器进行交互的时间

            作用范围:
                在一个会话之中起作用.一个会话中可以有多个request请求,所以放在session中的数据,可以被多个请求所共享.
            
            思考:每次request对象创建之后,服务器怎么知道这个request和哪个session对象相对应?
            
            注意:注意服务器正常关闭和非正常关闭对session对象的影响(session被序列化的问题)
 当tomcat非正常关闭时,tomcat会把session存到硬盘上,序列化后保存到一个session文件中,当再次 启动服务器会反序列化,此时 session的反序列化会异常
            
        application对象
            ServletContext被称为应用上下文/servlet上下文
            生命周期:
                启动tomcat服务器的时候,就会被创建
                关闭tomcat服务器的时候,就会被销毁
                而且每个项目在运行期间,都会有且只有一个application对象

            作用范围:整个项目在运行期间,只有一个application对象,所以这个对象是所有用户共享的,大家都可以向这个对象里面存值,也可以再拿出来.因为这个对象一个项目中只有一个.


    2.3    使用这三种对象存/取数据
        存值:
        request.setAttribute("key", value);
        session.setAttribute("key", value);
        application.setAttribute("key", value);
        
        取值:
        request.getAttribute("key");
        session.getAttribute("key");
        application.getAttribute("key");

posted @ 2019-12-10 19:21  下饭  阅读(431)  评论(0编辑  收藏  举报