FilterConfig接口
为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法,具体如表1所示。
表1 FilterConfig接口中的方法
方法声明 | 功能描述 |
---|---|
String getFilterName () | 例4-2 getFilterName()方法用于返回在web.xml文件中为Filter所设置的名称,也就是返回<filter-name>元素的设置值。 |
例4-3 ServletContext getServletContext() | 例4-4 getServletContext()方法用于返回FilterConfig对象中所包装的ServletContext对象的引用。 |
例4-5 String getInitParameter(String name) | 例4-6 getInitParameter(String name)方法用于返回在web.xml文件中为Filter所设置的某个名称的初始化参数值,如果指定名称的初始化参数不存在,则返回null。 |
例4-7 Enumeration getInitParameterNames() | 例4-8 getInitParameterNames()方法用于返回一个Enumeration集合对象,该集合对象中包含在web.xml文件中为当前Filter设置的所有初始化参数的名称。 |
表1列举了FilterConfig接口中的一系列方法,为了让读者更好的掌握这些方法,接下来,以getInitParameter(String name)方法为例,通过一个案例来演示FilterConfig接口的作用,具体如例1所示。
例1 MyFilter03.java
1 package cn.itcast.chapter04.filter;
2 import java.io.*;
3 import javax.servlet.*;
4 public class MyFilter03 implements Filter {
5 private String characterEncoding;
6 FilterConfig fc;
7 public void destroy() {
8 }
9 public void doFilter(ServletRequest request, ServletResponse response,
10 FilterChain chain) throws IOException, ServletException {
11 // 输出参数信息
12 characterEncoding=fc.getInitParameter("encoding");
13 System.out.println("encoding初始化参数的值为:"+characterEncoding);
14 chain.doFilter(request, response);
15 }
16 public void init(FilterConfig fConfig) throws ServletException {
17 // 获取FilterConfig对象
18 this.fc = fConfig;
19 }
20 }
接下来在web.xml文件中部署过滤器。由于Filter链中各个Filter的拦截顺序与它们在web.xml文件中<filter-mapping>元素的映射顺序一致,因此,为了防止其他Filter影响MyFilter03的拦截效果,我们将MyFilter03注册在web.xml文件最前端,具体注册代码如下:
<filter>
<filter-name>MyFilter03</filter-name>
<filter-class>cn.itcast.chapter04.filter.MyFilter03</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter03</filter-name>
<url-pattern>/MyServlet</url-pattern>
</filter-mapping>
重新启动Tomcat服务器,在浏览器地址栏中输入http://localhost:8080/chapter04/MyServlet
访问MyServlet,控制台窗口中显示的结果如图1所示。
图1 控制台窗口
从图1中可以看出,使用Filter获取到了配置文件中的初始化参数。当Tomcat服务器启动时,会加载所有的Web应用,当加载到chapter04这个Web应用时,FirstFilter就会被初始化调用init()方法,从而可以得到FilterConfig对象,然后在doFilter()方法中通过调用FilterConfig对象的getInitParameter()方法便可以获取在web.xml文件中配置的参数信息。