在 javaee 中我們經(jīng)常會使用 Filter 來解決中文亂碼的問題!
但是使用這種方式我們通常只是用來解決 POST 提交的中文編碼問題, 那對于GET 方式提交的呢? 是不是就不能素手無策了呢 ?
網(wǎng)上有很多解決 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); }
最后,在程序中就不用再擔(dān)心編碼的問題了
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。