jsp中 application 、EL表达式中applicationScope 、 Java中servletContext 关系
1.jsp中 application:
application 对象也是在服务器启动就生成一个,服务器关闭,其才释放。保证了用户在不同的页面间浏览可以获取共享的公共信息。
2.EL表达式中applicationScope
${applicationScope.bizCodes[category]}" ------------EL表达式
jsp中因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
【jsp中】 【EL表达式中】 【servlet】
Page PageScope
Request RequestScope Request
Session SessionScope Session(Cookie)
Application ApplicationScope Servercontext
3.page,request,session,application四个域对象的使用及区别
1.page指当前页面。只在一个jsp页面里有效 。
page里的变量没法从index.jsp传递到test.jsp。只要页面跳转 了,它们就不见了。
2.request 指从http请求到服务器处理结束,返回响应的整个过程。在 这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。
3.Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
4.application它的有效范围是整个应用。
作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。
application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。
4.Java中servletContext
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
换一种方式说吧,运行在 Java虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。ServletContext对象是Web服务器中的一个已知路径的根,Servlet上下文被定位于http://localhost:8080/项目名.以 /项目名 请求路径(称为上下文路径)开始的所有请求被发送到与此ServletContext关联的Web应用程序。一个ServletContext对象表示了一个Web应用程序的上下文。
Servlet上下文:Servlet上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同一服务器的Servlet有时会共享资源,如JSP页面、文件和其他Servlet。
举例:
地区信息等,全国的省市县市固定的,所有我们就可以服务器启动的时候,我们就将数据放入servletContext中,避免多次请求数据库。
三者的区别:
其application对象在Servlet中是ServletContext的实例对象,
可以在你写的Servlet中通过this.getServletContext();方法来获取一个ServletContext实例对象.
比如:
this.getServletContext().setAttribute(“users”,userList);
然后在显示层调用还是使用application.getAttribute(“users”);
来实现.
所以全局变量在servlet中叫ServletContext;在jsp中叫application;而application在EL表达式中叫:applicationScope 。