简单粗暴的方法
给 request
对象设置编码集即可
request.setCharacterEncoding("utf-8");
过滤器
上面的方法有一点不好, 就是如果你的 html
的编码是 GBK
, 但你的 request
对象的编码是 utf-8
那还是会乱码, 就是说两者要保持一致, 但这样硬编码其实不利于开发和部署, 最好使用过滤器
- 创建一个 CharacterEncodingFilter 类
package com.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "EncodingFilter", urlPatterns = {"/*"}) // 对所有请求过滤 public class CharacterEncodingFilter implements Filter { protected String encoding = "UTF-8"; // 编码 public void init(FilterConfig config) { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { if (encoding != null) { // 如果成功取得初始参数 req.setCharacterEncoding(encoding); } chain.doFilter(req, resp); // "过滤链"继续向上或向下传递, 一定要有! } public void destroy() { encoding = null; } }
- 重启服务器, 刷新即可