在 javaee 中我们经常会使用 Filter 来解决中文乱码的问题! 但是使用这种方式我们通常只是用来解决 POST 提交的中文编码问题, 那对于GET 方式提交的呢? 是不是就不能素手无策了呢 ?
网上有很多解决 GET 方式中文编码问题,大都千篇一律。 1,在 Servlet 中手动解码 String keyword = new String(request.getParameter("keyword").getBytes("iso-8859-1"),"utf-8");
2, 就是从 tomcat 的配置入手,修改 server.xml 文件 (SUN 不推荐此做法) <Connector port="8088" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
下面给大家介绍给一劳永逸的做法,搞个过滤器既能解决 GET 编码,又能解决 POST 编码,是不是很 cool ? public class CnRequestWrapper extends HttpServletRequestWrapper {
public CnRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null && !"".equals(value)) {
try {
value = new String(value.getBytes(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
} }
然后在自己的 CharsetFilter 中使用这个自定义的包装器将请求包装一下即可 public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
chain.doFilter(new CnRequestWrapper(request), res);
}
最后,在程序中就不用再担心编码的问题了
|