Servlet三大作用域

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

猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/85217228
今日推荐