Java Web 过滤器
一、过滤器的作用:
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术可以对web服务器管理的所有web资源:Jsp,Servlet, 静态图片文件或静态html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、验证用户是否登录、过滤敏感词汇、压缩响应信息等一些高级功能。
二、过滤器使用
使用过滤器必须实现接口Filter,并实现其三个方法:
void init(FilterConfig filterConfig){}
init 方法初始化过滤器
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain){}
doFilter 方法进行过滤器业务操作,其中有一个参数FilterChain chain,用于将用于请求抛向下一个过滤器,或服务器(当没有下一个过滤器的时候,过滤器执行先后顺序是根据web.xml里配置的先后顺序进行的)。
void destroy(){}
destroy 方法用于在退出过滤器之前释放资源。
下面我们来实现字符编码过滤器
首先需要创建过滤器类,如下代码:
package com.filter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
import javax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
public classCharacterEncodingFilter implements Filter {
/*存放Web.xml中的参数*/
private Stringencoding = "";
/*初始化过滤器类*/
public void init(FilterConfigconfig) throws ServletException {
//获取web.xml文件中配置的过滤器参数encoding
this.encoding =config.getInitParameter(encoding);
}
/*过滤器具体实现*/
public voiddoFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if(this.encoding!=null){
//设置请求字符编码
request.setCharacterEncoding(this.encoding);
}
//将请求抛向下一个过滤器或服务器
chain.doFilter(request,response);
}
/*释放过滤器资源*/
public void destroy() {
this.encoding =null;
}
}
其次,在web.xml中配置过滤器
<!-- web.xml中声明过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name><filter-class>com.filter.CharacterEncodingFilter</filter-class>
<!-- 为过滤器初始化一个参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 过滤器拦截的请求URL -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上就完成了。