首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

apachet转发请求到tomcat的中文化有关问题解决方案

2012-10-30 
apachet转发请求到tomcat的中文化问题解决方案在用mapguide做webgis应用的时候,再次遇到中文化问题。场景是

apachet转发请求到tomcat的中文化问题解决方案
在用mapguide做webgis应用的时候,再次遇到中文化问题。

场景是这样的:
由于某种需求的原因,有个请求必须用get的方式传送,而且url参数中含有中文。
首先,我在发送请求之前,用encodeURI将中文参数编码了。
代码示意如下:

var params = ....params = encodeURI(params);url = url + '&' + params;...


然后,在tomcat端接收到参数的时候,通过URIDecoder.decode来将参数解码。
代码如下:
    public static Map<String, String> decodeRequestToMap(HttpServletRequest request) {        Map<String, String> m = new HashMap<String, String>();        Enumeration<String> e = request.getParameterNames();        try {            while(e.hasMoreElements()) {                String k = e.nextElement();                String value = URLDecoder.decode(request.getParameter(k), "UTF-8");                m.put(k, value);            }        } catch (UnsupportedEncodingException e1) {            if (log.isErrorEnabled()) {                log.error("不可能不支持UTF-8的啊!", e1);            }        }        return m;    }

另外有个Filter将request和response的charactorEncoding设置为UTF-8。
代码如下:
        request.setCharacterEncoding(this.charactorEncoding);        response.setCharacterEncoding(this.charactorEncoding);        chain.doFilter(request, response);


但是我在调试的时候发现在filter起作用之前,中文参数已经是乱码了,而其他通过post方式传送的中文参数不受影响。这样,我在tomcat端作的所有工作都是白费。

问题在那里呢?我在网上google了一把,有人说在apache的httpd.conf里面,要把AddDefaultCharset 设置成这个样子:AddDefaultCharset off。
原文大概如此:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
后面这个URIEncoding="UTF-8"就是我加上去的东西,原来是没有这个的。

然后测试。果然,乱码没有了。 1 楼 jhj823900 2008-06-26   很老的问题了,一般实际开发都是这样做的,至少我们用的tomcat5.0.28是这样处理的
跟apache一点关系没有,也就是以前用8080也是加这个URIEncoding,现在结合apache是用的8009而已,所以把8080那里用的移过来了. 2 楼 xuxiangpan888 2008-07-15   谢谢了我今天才刚解决了,

以前就是奇怪用tomcat好的,用了apache后还要再转一次,现在不要了 3 楼 xieboxin 2008-07-16   其实不用改tomcat或apache的文件,程序改为:

String par = new String(request.getParameter(k).getByte("ISO-8859-1"),"UTF-8")

这样就OK……

热点排行