分享

使用 HttpServletRequestWrapper 过滤 GET 请求编码问题

 CevenCheng 2010-09-08
在 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);
	}

最后,在程序中就不用再担心编码的问题了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多