Filter过滤器—编码过滤
我们在开发网页的时候经常会遇到编码的问题,这时候我们必须在每一次获得request和response的时候都执行一遍
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
这样会变的十分麻烦,但是如果使用Filter过滤器则就会很简单地实现编码的过滤。只需要下边两个部分:
1.EncodingFilter.java 代码如下
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
String encoding="";
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain fchain) throws IOException, ServletException {
//设置编码格式
req.setCharacterEncoding(encoding);
res.setCharacterEncoding(encoding);
fchain.doFilter(req, res);
}
@Override
public void init(FilterConfig config) throws ServletException {
//在web.xml中配置编码格式,易于维护
encoding=config.getInitParameter("encoding");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
2. web.xml的配置如下
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>cn.filter.EncodingFilter</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>
Filter执行顺序
经过上边两个步骤我们就可以设置一个编码过滤器用来统一编码格式了,从而避免了很多页面上编码的问题。
但这时候可能比较细心的人会问如果有两个Filter的时候它们的执行顺序是怎样的?
这一点花费了很长时间去验证网上的说明。
一般都是说和Filter在web.xml中的声明顺序有关,但我在上机操作的过程中并不是这样(不排除我的环境有问题),反倒是和Filter的名字即的字符串大小 关系较大一些,但name长了之后还是会有不符合规则的情况,所以我这里给大家点一下,大家有兴趣可以自己去试一下,如果大家找到正确答案也请指教我一下,谢谢喽!