Java过滤器
过滤器能够对目标资源的请求和响应进行截取。过滤器,顾名思义,就是把不符合规则的请求、响应进行拦截或修改。
过滤器是处于客户端与服务器之间的一道过滤网,从客户端发出的请求先在第一个filter进行过滤,然后在filter链中的下一个filter进行过滤,直至filter链中的所有filter都通过了才可以访问资源文件。过滤器通常是用来处理请求(request),也可以对返回的响应(response)进行处理。如下图所示。
过滤器基本了解了,下面来简单应用过滤器。
首先新建一个Class,实现接口Filter(注意:是javax.servlet.Filter)。在Class中重写Filter的doFilter(ServletRequest arg0,
ServletResponse arg1, FilterChain arg2)方法,destroy()、init(FilterConfig
arg0)不需要重写,在doFilter方法内进行过滤。同时要在web.xml中配置过滤器,如下所示。
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.zxx.util.charsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
处理中文乱码的过滤器举例:
从jsp发出请求,内含中文数据,在后端接收到的中文数据是乱码。可以在servlet中的设置字符编码,也可以在过滤器中设置字符编码,使用过滤器区别在请求到达servlet之前,先对reques对象设置编码。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException {
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
filter.doFilter(request, response);
}