请查看一下tomcat的配置文件server.xml(jboss也是用tomcat做的),其中有至少一个<Connector>标签,加上一个属性就可以了,例如:
<Connector port="8080" ... useBodyEncodingForURI="true" />
注意,所有的connector都要加。原因见Tomcat FAQ: http://tomcat.apache.org/faq/misc.html#tomcat5CharEncoding
简单解释,按照URL规范,URL应该始终以UTF-8的方式来编码参数,然而由于众多浏览器历史的原因,事实上,大家都是按表单页面的content-type中指定的charset来编码所提交的表单。
例如:Web server用content-type为text/html; charset=GBK返回一个空白表单页面,然后用户填写并提交。IE将用GBK编码所有表单字段(无论是GET还是POST方法),并提交。
Tomcat 5希望完全遵行标准,于是默认总是以UTF-8来解码query data,这就造成了乱码。好在tomcat提供了向下兼容的方案,就是上述参数。有了这个参数,Tomcat 5的行为和Tomcat 5之前的版本就兼容了。