过滤器,顾名思义,就是横亘在用户层和服务层之间的中间人。可以用来拿到通信的内容,通常是用户的请求和响应,并且可以做修改。
要添加一个过滤器,需要三步。
- 实现过滤器的接口。
- 在web.xml中注册。
- 在web.xml中说明过滤的url映射
public class FilterTest implements Filter{
public void destroy() {
System.out.println("----Filter销毁----");
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
// 对request、response进行一些预处理
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("----调用service之前执行一段代码----");
filterChain.doFilter(request, response); // 执行目标资源,放行
System.out.println("----调用service之后执行一段代码----");
}
public void init(FilterConfig arg0) {
System.out.println("----Filter初始化----");
String t=arg0.getInitParameter("ss");//这里可以获得在web.xml中配置的初始化参数
System.out.println(t);
}
}
上面是一个过滤器,有三个方法。
init和destroy分别在web服务器加载和销毁的时候被执行。
deFilter是过滤的核心方法。用法见上述代码。
配置xml代码,注意filter配置必须要放在servet之前
<filter>
<filter-name>filter_test</filter-name>
<filter-class>com.yrk.domain.FilterTest</filter-class>
<init-param>
<param-name>ss</param-name>
<param-value>hhhhh</param-value>
</init-param>
</filter>
<!--配置过滤所有映射-->
<filter-mapping>
<filter-name>filter_test</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
java web默认中文会乱码。这时候我们可以使用spring中的过滤器来转码。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>