特性:
一个项目只有一个ServletContext对象 服务器启动时创建一个ServletContext对象,服务器关闭时销毁对象
作用
ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。
如何获取
ServletConfig#getServletContext()
GenericServlet#getServletContext()
HttpSession#getServletContext()
ServletContextEvent#getServletContext()
在Servlet中:
ServletContext context = config.getServletContext
在GenericServlet和HttpServlet:ServletContext context = this.getServletContext
方法
域对象方法:
void setAttribute(String name, Object value)
Object getAttribute(String name)
void removeAttribute(String name)
Enumeration getAttributeNames()
获取应用初始化参数
Servlet小结中我们知道,GenericServlet类有一个getServletConfig方法可以得到ServletConfig,而ServletConfig可以得到Servlet的初始化参数,但这只是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备。
而ServletContext可以得到应用初始化参数;即公共的初始化参数,为所有Servlet而用。
String getInitParameter("name");
Enumeration<String> getInitParameterNames();
获取资源相关方法
获取真实路径
获取a.txt的真实路径:String path = context.getRealPath("/a.txt");
得到结果:path: X:\Java\apache-tomcat-7.0.42\webapps\review\a.txt
获取资源流
不只可以获取资源的路径,还可以通过ServletContext获取资源流,即把资源以输入流的方式获取:
- 获取index.jsp资源流:
InputStream in = servletContext.getResourceAsStream("/index.jsp");
- 获取a.txt资源流:
InputStream in = servletContext.getResourceAsStream("/WEB-INF/a.txt");
获取指定目录下所有资源路径
还可以使用ServletContext获取指定目录下所有资源路径,例如获取/WEB-INF下所有资源的路径:
Set<String> set = context.getResourcePaths("/WEB-INF");
for(String s : set) {
System.out.println(s);
}
>>>
/WEB-INF/lib/
/WEB-INF/classes/
/WEB-INF/web.xml