请求乱码
就是浏览器输入的数据提交给服务器后,服务器端接收到后乱码。
解决:request.setCharacterEncoding(“utf-8”);
注意:一定要在调用request.getParameter()之前加上。不能在其之后。
响应乱码
服务器端将数据响应给浏览器后,浏览器看到乱码。
解决:response.setContentType(“text/html;charset=utf-8”);
注意:添加到响应给浏览器数据之前。
过滤器处理响应乱码和请求乱码
上述的方法,处理乱码在每个servlet中都要写
用过滤器可以全局处理乱码问题
自定义过滤器需要实现Fiter接口
新建一个Filter
@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
//"/*" 表示所有请求都要经过过滤器
public class EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//处理请求乱码
req.setCharacterEncoding("utf-8");
//处理相应乱码
resp.setContentType("text/html;charset=utf-8");
//判断当前过滤器之后是否还有其他过滤器,如果有继续执行,否则直接访问目标资源(jsp、html、img、Servlet)
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
测试结果:
获取名字username打印到控制台和浏览器
经过过滤器乱码处理后显示正常