Struts2 Action接收中文乱码问题

问题:form表单提交,action接收参数,打印在服务器后台,结果参数乱码。

    

解决办法:

     首先,先去检查一下 WebRoot\WEB-INF\lib 下面所引用的jar包。已知 struts2-core-2.1.6.jar 有重大BUG,即使用最新的 StrutsPrepareAndExecuteFilter 过滤器对中文编码设置有问题。因此使用更加新的 struts2-core 的jar包,在这里替换掉为 struts2-core-2.3.24.jar 这个目前最新的jar包。换掉的同时,还需要把与之对应的 xwrok 的包也更新为相对应的版本,也即是 xwork-core-2.3.24.jar

    但是,仅仅替换掉一个还不够。替换后Tomat会报另外一种Error:

    java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    由此可见,最新的 struts2-core 包需要 commons-lang3 这个jar包支持。因而继续导入 commons-lang3-3.2.jar 这个jar包。

    导完之后,接着Tomcat会报下一种Error:

    java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z

    这个通常是ognl包的问题,一般使用 struts2 中lib目录下与之版本相对应的ognl包,这里更换为 ognl-3.0.6.jar 包。

    但是,这还没有完结。Tomcat报的下一个Error是:

    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

    这个Error是由于缺少 javassist 这个包导致的,导入最新的 javassist-3.11.0.GA.jar 即可解决问题。

    下一个Error:

    java.lang.NoSuchFieldError: VERSION_2_3_0

    这个ERROR与 freemarker 包有关系,一般更新一下jar包即可解决,在这里替换为 freemarker-2.3.22.jar

    到这里,Tomcat已经不报错了。


    进行页面测试中文传参的时候,Tomcat报了Error:

    There is no Action mapped for namespace [/user] and action name [user!add] associated with context path [/Struts2_1000_CharacterEncoding]. - [unknown location]

    这个问题主要是因为 DMI 与通配符方法功能有重叠,因此该版本Struts2默认关闭DMI,需要在 struts.xml 中加一句<constant name="struts.enable.DynamicMethodInvocation" value="true" />来打开动态方法调用。因为,动态方法调用官方推荐的做法是,使用通配符的形式。不要使用actionName!methodName的方式。

    修改完成后,就能解决掉中文参数问题了。

       

    


你可能感兴趣的:(struts2,中文乱码)