ServletContext接口
每个Web应用程序都是一个独立的Servlet容器,每个Web应用程序分别用一个ServletContext
对象来表示,ServletContext
接口定义了ServletContext
对象需要对外提供的方法,Servlet程序通过这些方法与Servlet容器进行通信。
获取ServletContext对象
前面讲了ServletConfig接口的使用,该接口中提供了如下方法
public ServletContext getServletContext() {
return this.getServletConfig().getServletContext();
}
ServletContext接口的实现类由Servlet容器提供。
配置和获取WEB应用程序的初始化参数
在ServletConfig接口的使用 中讲到了如何在web.xml文件中配置一个Servlet程序的初始化参数,这些初始化参数是在<servlet>
标签下配置的,是隶属于某一个指定的Servlet类的。
我们可以在server.xml
和web.xml
配置文件中配置WEB应用程序的初始化参数,这些参数是针对这个WEB应用程序的,也就是说,该WEB应用程序下的所有Servlet程序都可以获取这些参数。
在server.xml中的配置
在Tomcat基础中讲了如何设置web站点的根目录,通过在servler.xml文件中的<Host>标签下配置<Context>标签可以配置映射到本地的根目录:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/Users/oyty/Documents/webtest" debug="0" reloadable="true" />
</Host>
如果我们要配置该WEB站点的初始化信息,可以在<Context>标签下添加<Paramater>标签进行配置:
<Context path="" docBase="/Users/oyty/Documents/webtest" debug="0" reloadable="true" >
<Parameter name="companyName" valve="Flash" override="false"/>
</Context>
override
属性用于指定在Web应用程序中的web.xml文件设置的同名初始化参数是否覆盖这里的设置。默认值为true,表示可以覆盖。
在web.xml中的配置
在跟元素<web-app>标签下添加<context-param>标签:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<context-param>
<param-name>companyName</param-name>
<param-value>Flash_haha</param-value>
</context-param>
</web-app>
获取配置的初始化参数
通过ServletContext中的下列方法获取:
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();
application域范围的属性
由于一个Web应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为application对象(Web应用程序对象)。application对象(ServletContext对象)内部有一个哈希表集合对象,存储进application对象内的哈希表集合对象中的每对键值对都被称为application对象的属性。这些属性能被每一个Servlet程序所访问。
ServletContext接口定义的操作属性的方法:
Object getAttribute(String var1);
Enumeration<String> getAttributeNames();
void setAttribute(String var1, Object var2);
void removeAttribute(String var1);
访问资源文件
ServletContext接口中国定义的相关方法:
Set<String> getResourcePaths(String var1);
URL getResource(String var1) throws MalformedURLException;
InputStream getResourceAsStream(String var1);
-
getResourcePaths方法
参数必须以/
起始。
如果Web应用程序的目录如下:
/welcome.html
/WEB-INF/web.xml
那么,getResourcePaths("/")返回的是["/welcome.html", "/WEB-INF/"],getResourcePaths("/WEB-INF/")返回的是["/WEB_INF/web.xml"]。 -
getResource()方法
返回映射到某个资源上的URL对象。 -
getResourceAsStream()方法
返回连接到某个资源上的InputStream对象。
获取虚拟路径所映射的本地路径
ServletContext接口中定义:
String getRealPath(String var1);
参数用法和getResourcePaths
一致。
参考:
张孝祥《Java Web基础》