在servlet运行期间,经常需要一些辅助信息,这些信息可以放在web.xml文件中使用一个或多个<init-param>元素进行配置。 当Tomcat初始化时会将该配置信息封装到servletconfig对象中,通过调用init(servletconfig config)方法将servletconfig对象传递给servlet。
servletconfig接口的常用方法
方法说明 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化初参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象。其中包含所有的初始化参数名 |
ServletContext getServletContext | 返回一个代表当前web应用的servletcontext对象 |
String getServletName() | 返回servlet的名字,即web.xml中的<servlet-name>元素的值 |
***servletconfig接口
配置web.xml中的配置信息
<servlet>
<servlet-name>sds</servlet-name>
<servlet-class>d.dfd.fdg</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sds</servlet-name>
<url-pattern>/dfjkdj</url-pattern>
</servlet-mapping>
获取web.xml中的信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out =response.getWriter();
// 获得servletconfig对象
ServletConfig config = this.getServletConfig();
// 获得参数名为encondig对应的参数值
String param = config.getInitParameter("encoding");
out.println("encoding="+param);
}
sletcontext接口
获取web应用程序的初始化参数
在web.xml中不仅可以配置servlet的初始化信息,还可以配置整个web应用的初始化信息。web应用初始化参数配置如下
<context-param>
<param-name>xxx</param-name>
<param-value>anc</param-value>
</context-param>
<context-param>
<param-name>aaa</param-name>
<param-value>xsds</param-value>
</context-param>
获取web.xml中的配置信息的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
// 得到servletcontexr对象
ServletContext context = this.getServletContext();
// 得到包含所有初始化参数名的Enumeration对象
Enumeration<String> paramNames = context.getInitParameterNames();
// 遍历所有的初始化参数名,得到相应的参数值打印
while (paramNames.hasMoreElements()) {
String name = paramNames.nextElement();
String value = context.getInitParameter(name);
out.print(name+":"+value);
out.println("<br />");
}
实现多个servlet对象共享数据
由于一个web应用程序共同共享一个servletcontext对象,因此可以通过servletcontext对象共享数据,servletcontext提供了四个接口,分别是:
方法说明 | 功能描述 |
---|---|
Enumeration getAttributeNames() | 返回一个Enumeration对象,该对象包含了所有存放在servletcontext中的所有域属性名 |
Object getAttribute(String name) | 根据参数指定的属性返回值 |
void removeAttribute(string name) | 从servletcontext删除参数指定的属性 |
void setAttribute(String name,Object obj) | 设置servletcontext的域属性,其中name是域属性名,obj是属性值 |
通过servletcontext共享数据
向servletcontext添加数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取servletcontext对象
ServletContext context = this.getServletContext();
// 设置servletcontext中的参数及值
context.setAttribute("name", "张三");
context.setAttribute("age", "15");
}
获取servletcontext对象中的值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取servletcontext对象
ServletContext context = this.getServletContext();
// 获取指定参数的值
String name = (String)context.getAttribute("name");
String age = (String)context.getAttribute("age");
// 通过getattributenames获取enumeration对象
Enumeration ss = context.getAttributeNames();//获取servletcontext对象的enumeration对象
while(ss.hasMoreElements()) {
String names = (String)ss.nextElement();
String value = (String)context.getAttribute(names);
System.out.println(name+value);
}
}
读取web应用下的资源文件
在实际开发中我们常常会需要读取web应用中的一些资源文案,比如配置文件、图片等,为此,在servletcontexr接口中定义了一些读取web资源的方法,这些方法是依靠 servlet容器来实现的。servlet容器根据资源文件相对于web应用的路径,返回关联资源文件的io流、资源文件在文件系统的绝对路径。
方法说明 | 功能描述 |
---|---|
Set getResourcePaths(String path) | 返回一个set集合,集合中包含资源目录中字目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径 |
String getRealpath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/”表示当前web应用的跟目录,如果servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null |
URL getResource(String path) | 返回映射到某个资源文件的url对象。参数path必须以正斜线(/)开始,/表示当前web的跟目录 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的Inputstream输入流对象。参数path传输规则和getResource()方法完全一致 |