Struts2(JSP)的URL请求中文乱码问题

Struts2(JSP)的URL请求中文乱码问题
2009-6-8 星期一 雨

今天下午刚好广陵同学去面广西IBM,我就在他笔记本上试着解决上次没有解决的URL中文请求乱码问题。直到刚才才解决。不奇怪,因为中国人特有的问题一般是在网上找不到答案的。一搜,遇到同样问题的还真不少,给出解决方法的还不少,但是很多都是重复,贴来贴去的,说的头头是道,照着做就是不行。已经是见惯不怪了。
比如说使用Spring自带的charEncodingFilter不行,自己写了一个Filter也不行。总之试了很多方法,重启了无数次Tomcat,还是不行。
比如这篇: struts2中文乱码解决方法,似乎很有道理,但是照做还是不行。
不过有个很搞笑的现象,就是使用它介绍的最无奈的方法:

public class ConvertCharacter{
        public String Convert(String s){
            String result;
            byte[] temp ;
            try{
                temp = s.getBytes("iso-8859-1");
                result =  new String(temp,"utf-8");
            }
            return result;
        }
   }

发现在非IE内核的浏览器中是有效的,但是在IE内核的浏览器(比如Sogo),当传递的中文参数超过2个字就不行了。比如http://localhost:8080/JmsSyncSender/modifyUser?userId=某人就可以,但是http://localhost:8080/JmsSyncSender/modifyUser?userId=某某人,转换之后就是某某?乱码,也就是说从第三个字开始就是乱码了,太奇怪了,百思不得其解。

还是搜索一下英文吧,还真找的不错的文章。比如下面这篇:http://www.inter-locale.com/codeset1.jsp。不过它似乎跟上面那篇是一样的,只不过解释了为什么这么做的原因。

广陵回来后搜索到一篇文章,地址栏传值,中文乱码:
1.(方法一)
window.location=encodeURI(路径);

2.(方法二)tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码 
需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:

<Connector port="8080" 
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
              enableLookups="false" redirectPort="8443" acceptCount="100" 
              debug="0" connectionTimeout="20000" 
              disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-
8"/>

中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了.

使用第二种方法试了一下,将上面的转换类代码去掉,发现两者的效果是一样的。后者是有Tomcat帮我做了转换。这虽然方便了一些,但是还是没有解决IE内核浏览器的问题。

最后,我想是不是因为使用URL传值的问题呢?如果采用Form传值会怎样呢?于是试了一下,使用Hidden field,并使用

<a href="javascript: on_update_click('<s:property value=username />') >更新</a>
 
function on_update_click(username){
   var txtUserId = document.getElementById("userId");
   if(txtUserId!=null){
       txtUserId.value= username;
   }
   document.listUserForm.action = "modifyUser";
   document.listUserForm.submit();
}

这下都可以了,深感欣慰。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值