application 和 session 的区别

application 和 session 的区别

TestServlet1.java:

public class TestServlet1 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		
		ServletContext application = this.getServletContext();
		application.setAttribute("name1","Tom");
		Object o1 = application.getAttribute("name1");
		out.println(o1);
		
		HttpSession session = request.getSession();
		session.setAttribute("name2", "Cat");
		Object o2 = session.getAttribute("name2");
		out.println(o2);
	}

TestServlet2.java:

public class TestServlet2 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		
		ServletContext application = this.getServletContext();
		out.println(application.getAttribute("name1"));
		
		HttpSession session = request.getSession();
		out.println(session.getAttribute("name2"));
	}

既然我运行 TestServlet2 后两个(name1, name2)都能得到,那两者有啥区别呢?一般两者在什么情况下用呢?希望举一个具体的场景例子。

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你可以这么理解,session作用域可以存储一次会话的的相关数据,在会话结束后,存储在session中的数据就会被销毁,默认销毁时间20分钟。而application 多个用户共享的应用级别的作用域,在服务器端,相比session,这个存在时间是最长的,只有当关闭服务器的时候才死亡!所以数据可以在application中存放很长时间,祝学习愉快~

  • 刘鑫同学 提问者 #1
    默认销毁时间20分钟的意思是这样吗? 如果我在test1.jsp里写: session.setAttribute("sess", "print_sess"); application.setAttribute("app", "print_app"); test2.jsp: <%=session.getAttribute("sess")%> <%=application.getAttribute("app")%> 这样先运行test1.jsp,然后等20分钟后再在网址输入test2.jsp,这样只能输出"print_sess"了,对吗?我在浏览器里只关掉网页重新打开test2.jsp,"print_sess"还是能输出的,清除缓存后就只能输出"print_app"了,如果不清除缓存的话我只能等20分钟再打开了,对吧?
    2018-11-23 23:20:56
  • chrismorgen 回复 提问者 刘鑫同学 #2
    1、如果你20分钟后输出session中的内容就不会输出内容,因为session对象已经被销毁了 2、浏览器的关闭与session的销毁是没有关系的,session对象是 存储在服务器端的。 3、session的销毁时间是可以设定的,通过如下方法设定即可。session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效
    2018-11-25 10:51:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师