1、request作用域:针对同一次请求,一般存放提示信息
每一次请求都是一个新的request对象,如果Web组件之间需要共享同一个请求中的数据,只能使用request作用域
对象类型 javax.servlet.http.HttpServletRequest
2、session作用域:针对同一次会话,一般存放用户信息
每一次会话都是一个新的session对象,如果需要一个会话中的多个同一个请求之间需要共享数据,只能使用session作用域
对象类型 javax.servlet.http.HttpSession
3、application作用域:针对同一个web项目/web应用
Tomcat从启动到关闭,web项目中有且仅有一个application对象,作用于整个Web应用,可以实现多个会话之间的数据共享
对象类型 javax.servlet.ServletContext
一、请求作用域(request作用域):1次请求中数据是有效的只要发送一个请求就会创建一个request对象,这个对象只在本次请求中有效。
一般用于不同页面之间的同一请求,比如表单的传值,a链接的传值跳转等。
通过 HttpServletRequest request 对象直接获取方法
常用的方法有:request.setAttribute(), request.getAttribute(), request.removeAttribute(), request.getParameter()等。
二、 会话作用域(session作用域):1次会话中数据是有效的
服务器会为每一个会话创建一个session对象,session中的数据可以被本次会话中的所有servlet访问,会话是从浏览器打开开始,到关闭浏览器结束。
session常用于登录验证,登录成功后浏览器会为其分配一个session键值对,之后的访问权限判断键值对就可以了
获取方式:HttpSession session = request.getSession();
Session的超时时间
Tomcat中Session的默认超时时间为20分钟。
java通过 session.setMaxInactiveInterval(int seconds) 修改超时时间。
也可以修改web.xml 配置超时时间。例如修改为15分钟:
15
三、全局作用域 (application作用域):只要服务器不关,数据一直是有效的
application是应用程序作用域,是从程序开始运行到运行停止。 注意:服务器只会创建一个ServletContext 对象
获取方式:
ServletContext application1 = super.getServletContext();
ServletContext application2 = req.getServletContext();
ServletContext application3 = req.getSession().getServletContext();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.request作用域
String username = request.getParameter("username");
request.setAttribute("amount", 100);//设值
request.removeAttribute("amount");
//2.session作用域
//先获得session
HttpSession session = request.getSession();
session.setAttribute("username", username);
Object s_username = session.getAttribute("username");
session.setMaxInactiveInterval(30*60); //超时时间30分钟,单位秒
session.removeAttribute("username");
//3.全局作用域 (application作用域)
//通过获取session再获取application
ServletContext application = request.getSession().getServletContext();
//直接获取父类javax.servlet.GenericServlet的方法
application = getServletContext();
application.setAttribute("number", 10);
Object a_number = application.getAttribute("number");
application.removeAttribute("number");
doPost(request, response);
}
ends~