ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象。
ServletContext的作用:存取数据、读取web.xml中的应用初始化参数、获取应用资源。
在HttpServlet中,可以通过以下方法来获取ServletContext对象
ServletContext sc = this.getServletContext()
ServletContext sc = this.getServletConfig().getServletContext()
1.存取数据
一个JavaWeb应用中,只有一个ServletContext对象,所以在ServletContext中保存的数据可以共整个JavaWeb应用中的共享。void setAttribute(String name, Object value):用来添加或替换ServletContext域数据
> servletContext.setAttribute("x", "X"),添加域数据
> servletContext.setAttribute("x", "XX"),覆盖域数据,因为在域中已经存在了名为x的数据,所以这次就是覆盖了
Object getAttribute(String name):通过名称来获取域数据
void removeAttribute(String name):通过名称移除域数据
Enumeration<String> getAttributeNames():获取所有域数据的名称2.读取web.xml中的应用初始化参数
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> ... <context-param> <param-name>p1</param-name> <param-value>v1</param-value> </context-param> <context-param> <param-name>p2</param-name> <param-value>v2</param-value> </context-param> ... </web-app>
servletContext.getInitParameter("p1"),返回v1
servletContext.getInitParameter("p2"),返回v2
servletContext.getInitParameterNames(),返回Enumeration<String>,包含p1和p2
servletContext.getInitParameter("p2"),返回v2
servletContext.getInitParameterNames(),返回Enumeration<String>,包含p1和p2
3.获取应用资源
String getRealPath(String path):获取资源的真实名称
String path = servletContext.getRealPath("/WEB-INF/a.jpg");
返回值为/WEB-INF/a.jpg真实路径,即磁盘路径,例如:f:/tomcat7/wabapps/JavaWeb01/WEB-INF/a.jpg
String path = servletContext.getRealPath("/WEB-INF/a.jpg");
返回值为/WEB-INF/a.jpg真实路径,即磁盘路径,例如:f:/tomcat7/wabapps/JavaWeb01/WEB-INF/a.jpg
InputStream getResourceAsStream(String path):获取资源的输入流
InputStream in = servletContext.getResourceAsStream("/WEB-INF/a.jpg");
Set<String> getResourcePaths(String path):获取指定目录下的所有资源路径
Set<String> paths = servletContext.getResourcePaths("/WEB-INF");
InputStream in = servletContext.getResourceAsStream("/WEB-INF/a.jpg");
Set<String> getResourcePaths(String path):获取指定目录下的所有资源路径
Set<String> paths = servletContext.getResourcePaths("/WEB-INF");
返回的Set中包含如下字符串,例如:
> /WEB-INF/lib/
> /WEB-INF/classes/
> /WEB-INF/web.xml
> /WEB-INF/a.jpg
> /WEB-INF/lib/
> /WEB-INF/classes/
> /WEB-INF/web.xml
> /WEB-INF/a.jpg