Servlet三大作用域包括:
1、request作用域:针对同一次请求,一般存放提示信息,属于HttpServletRequest;
2、session作业域:针对同一次会话,一般存放用户信息,属于HttpSession;
3、application作业域:针对同一个web项目,里面的所有Servlet共享application作用域,一般不用于存放信息而用于获取根目 录下的所有资源,类似一个web全局对象,属于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分钟:
<session-config>
<session-timeout>15</session-timeout> <!-- 单位: 分钟 -->
</session-config>
</web-app>
Session与Cookie的区别:
session与cookie都可以用来跟踪用户
1)session是保存在服务器端
cookie是保存在客户端
2)一个网站能够写入到客户端的cookie数据是有限制,一般是在50个左右
session的保存数据量是无限制
3)session相对安全
cookie不安全
三、全局作用域 (application作用域):只要服务器不关,数据一直是有效的
application是应用程序作用域,是从程序开始运行到运行停止。
通过session 可获取 ServletContext application = session.getServletContext();
或者 直接获取父类javax.servlet.GenericServlet的方法 application = getServletContext();
注意:服务器只会创建一个ServletContext 对象
@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);
}