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");