请求乱码
就是浏览器输入的数据提交给服务器后,服务器端接收到后乱码。
解决: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打印到控制台和浏览器

经过过滤器乱码处理后显示正常


本文详细介绍了如何解决Web应用程序中的请求和响应乱码问题,包括使用request.setCharacterEncoding('utf-8')处理请求乱码,使用response.setContentType('text/html;charset=utf-8')处理响应乱码,并通过自定义过滤器实现全局乱码处理。
113

被折叠的 条评论
为什么被折叠?



