1、ServletContext简介html
当Servlet容器在启动一个web应用时,会为它建立惟一的ServletContext对象。当Servlet容器终止一个web应用,则就会销毁它的ServletContext对象。java
ServletContext,是一个全局的存储信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户能够多个,session,一个用户一个,而servletContext,全部用户公用一个。因此为了节省空间,提升效率ServletContext中要放必须的、重要的、全部用户须要共享的线程又是安全的一些信息。web
换种方式说,运行在Java虚拟机中每个web应用程序都有一个与之相关的Servlet上下文。ServletContext对象时Web服务器中的一个已知根路径,Servlet上下文被定位于http://localhost:8080/项目名。/项目名 称为上下文路径,一个ServletContext对象表示了一个Web应用程序的上下文。数据库
Servlet上下文:Servlet上下文提供对应用程序中全部Servlet所共有的各类资源和功能的访问,Servlet上下文API用于设置应用程序中全部Servlet共有的信息,Servlet可能须要共享他们之间的共有信息,运行于同一服务器的Servlet有时也会共享资源,如jsp页面、文件和其余Servlet、安全
举例说明:服务器
如,作一个购物类网站,要从数据库中提取物品信息,若是用session保存这些物品信息,每一个用户都访问一遍数据库,效率就过低了;因此要用servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入servlet上下文中,这样,每一个用户只用从上下文中读入物品信息就好了。session
另外在jsp文件中,application是ServletContext的实例,由jsp容器默认建立,在servlet中调用getServletContext()获得ServletContext的实例。每一个应用都会有一个ServletContext对象与之关联,当容器分布在多个虚拟机上时,web应用在所分布的每一个虚拟机上都拥有一个ServletContext实例。app
2、ServletContext接口简介jsp
ServletContext接口定义了运行servlet的web应用的servlet视图。容器供应商负责提供servlet容器内ServletContext接口的实现。设置ServletContext对象,servlet能够记录事件日志,获取资源的URL地址,而且设置和保存上下文内能够访问的其余Servlet的属性。分布式
获取ServletContext实例:
一、经过ServletConfig接口的getServletContext()方法得到。
二、经过GenericServlet抽象类的getServletContext()方法得到,不过看源码发现这个方法其实也是调用了ServletConfig的getServletContext()方法。
三、HttpServlet类继承了GenericServlet抽象类,因此也能够经过getServletContext()获取。
3、ServletContext用途:
一、访问web应用的初始化参数和属性:
getInitParameter
getInitParameterNames
应用开发人员利用初始化参数传递配置信息,典型的例子是web管理员的e-mail地址或一个持有关键数据的系统名称。
在web.xml文件中配置初始化参数:
<context-param> <param-name>email</param-name> <param-value>xxxxxx</param-value> </context-param>
在servlet中访问初始化参数:
String email=this.getServletContext().getInitParameter("email"); System.out.println(email);
二、上下文属性:
servlet能够经过名称将对象属性绑定到上下文,任何绑定到上下文属性均可以被同一个web应用的其余 servlet使用。
setAttribute
getAttribute
getAttributeNames
romoveAttribute
当信息须要在运行于分布式环境中的servlet之间共享时,信息被放入会话中,存储于数据库中,或者存储于EJB组件中。
三、访问web应用的静态资源
使用servletContext接口能够直接访问web应用中的静态内容文档接口,包括html,gif和jpeg文件。
getResource
getResourceAsStream
这两个方法的参数都是以"/"开头的字符串,表示资源相对于context根的相对路径。文档结构能够存在于服务器文件系统,或是在远程服务器上,或其余位置。可是不能够用来得到动态资源,好比getResource("/index.jsp"),这个方法将返回该jsp文件的源码,而不是动态页面。
web应用资源的完整列表可使用getResourcePaths(String path)方法返回。
另外,每一个servlet上下文都须要一个临时的存储目录,servlet容器必须为每一个servlet上下文提供一个私有的临时目录,而且使它能够经过javax.servlet.context.tempdir上下文属性可用。