虽然tomcat可以设置 <Connector URIEncoding="xxx" 来防止乱码,但是是写死的,也就是说如果xxx写成gbk,而传入的是utf-8还是会造成乱码。
换一种思路,先在jsp上编码2次,再在action解码一次,就相当于把参数加密后在解密,就不用管tomcat的设置是什么了
<s:a action="processDefinitionAction_deleteAll?deploymentId=%{@java.net.URLEncoder@encode(@java.net.URLEncoder@encode(key,'UTF-8'),'UTF-8')}">删除</s:a>
而且注意,用静态方法是需要在struts.xml加上
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
注意:UTF-8必须大写,应为是字符串,不能用utf-8会造成接受的参数是null
而在action中因为struts2会先自己解码一次,所以咱们只解一次码就行了。
deploymentId = java.net.URLDecoder.decode(deploymentId,"UTF-8");
还有一点用注意,在没有用decode之前,action中的deploymentId参数一定是这种%E8%AF%95%E8%AF%95,如果是“涓腑”这样,那么你用jsp发出的参数肯定有问题(比如应该先编码两次,你只编了一次等等,反正是jsp发出的参数出问题了),action接受的就是乱码了,所以再什么解码也还是乱码了!