非常烦恼的struts2 URL中文乱码

这又是一个花费我差不多成十小时的问题——struts2 URL乱码!
我已经统一以utf-8编码了,包括jsp、action、数据库、tomcat的connector的URIEncoding、myeclipse和StrutsPrepareFilter的doFilter方法中都设置了编码格式为utf-8。
我用的是struts2.1.6,在网上搜索一下,得知到struts2.1.6的StrutsPrepareFilter有一个编码bug。对于这个bug,可以用spring2中的一个CharacterEncodingFilter来解决。具体做法是在web.xml文件中加入这个过虑器,代码以下:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要注意的是:这个filter一定要在struts2的filter之前配置。但我用的是重写StrutsPrepareFilter的doFilter方法。这些做法好像对URL传过来的参数无效。
如果是struts2.1.3以下的可以在struts.properties文件中设置一下编码属性,具体做法是:
Struts.i18n.encoding=utf-8
Struts.local=xxx
……
以上的方法都用过了,但就是解决不了“乱码”这个怪兽。
最后,上天还是不负有心人。我用的浏览器IE8(兼容性视图)和firefox(3.5.6),当设置tomcat的URIEncoding为gbk时IE8在URL上传过来的中文不会乱码,而firefox在URL传过来的中文却是乱码。当设置tomcat的URIEncoding为utf-8时,firefox在URL传过来的中文正常,而IE8在URL上传过来的中文却又乱码了。可以猜想到IE8和firefox3.5.6在将URL的参数传到服务时先以某种格式编码,但各自的编码格式不相同!
这个时候,没别的办法了,只好用最原始的方法:先将要以URL方式传递的参数以和服务器的编码格式编码再传送,但就不用再在服务端解码了。也就是先将tomcat的URIEncoding设为utf-8,再将中文参数编成utf-8格式。我的做法是:
<a href="cAction/interRoom.action?roomName=<s:property value='@java.net.URLEncoder@encode(roomName,"utf-8")'/>" target="_blank"><s:property value="roomName"/></a>
注意在struts2.1.3以上的要开启静态方法使用功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值