使用Servlet时,经常会在方法中加入两行的request和response的编码处理,如果是多个Servlet的话,每个都要写,会比较麻烦,所以这里给大家介绍一下Filter过滤器,使用过滤器统一处理编码问题。
首先,新建一个类,选择Add添加Filter接口,选择javax.servlet中的Filter,点击Finish。
创建完成之后,类里面会重写三个方法:init、doFilter、destory,主要代码在doFilter里面写。
package webtest;
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CharsetFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res= (HttpServletResponse) request;
// 拦截所有的请求,解决全站中文乱码,指定request和response的编码
req.setCharacterEncoding("utf-8"); // 只对消息体有效
res.setContentType("text/html;charset=utf-8");
chain.doFilter(req,res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
之后在web.xml中对过滤器进行配置。
<filter>
<filter-name>charsetFilter</filter-name>
<!-- 过滤器类CharsetFilter所在的包路径,Ctrl+左键,点击后可以跳转到 CharsetFilter,说明路径没问题-->
<filter-class>webtest.CharsetFilter</filter-class>
<init-param>
<!-- 初始化参数,设置编码 -->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 这里的filter-name要和上面的保持一致 -->
<filter-name>charsetFilter</filter-name>
<!-- 配置拦截路径,/*表示拦截所有路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
配置完成后Servlet里面就不用再处理中文编码了。