zoukankan      html  css  js  c++  java
  • 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");

  • 相关阅读:
    Promise 对象
    [转] LVM分区在线扩容
    [转] 打开 CMD 时自动执行命令
    [转] FFmpeg常用基本命令
    systemd 之 journalctl
    systemd 之 systemctl
    关于用户权限的加强与理解(上)
    [转] 测试环境下将centos6.8升级到centos7的操作记录
    [搞机] 双网卡做数据均衡负载
    [转] 网络基础知识1:集线器,网桥,交换机
  • 原文地址:https://www.cnblogs.com/yxj808/p/12018621.html
Copyright © 2011-2022 走看看