struts2乱码

今天遇到Struts2中,完成一个action以后,通过

<action name="saveDir" class="directorySaveAction" >
   <result type="redirect-action">
    <param name="actionName">listDirByParent</param>
    <param name="dirId">${directory.parentId}</param>
    <param name="child.id">${directory.id}</param>
    <param name="child.name">${directory.name}</param>
    <param name="from">${from}</param>
   </result>
  </action>

将请求转发到另一个action的时候,出现了中文乱码。一直以为是在这里用ognl表达式取出来的时候就乱码了,后来调了一天,想了想,才发现,这里执 行完saveDir的action以后,转发方式是redirect,那么就相当于是在地址栏重新输入,下面这个action的地址了,然后加上后面的参 数。那么就相当于你自己在地址栏输入listDirByParent.action?child.name=中文。。。,那么这样的请求属于get方式请 求,不会通过过滤器进行过滤,而是通过tomcat进行地址的编码,而tomcat的编码,我记得是iso-8809-1,那么在action端 Struts2默认是utf-8的编码方式,所以编码跟解码的方式出现了不符,就会出现乱码了。那么解决办法就是,直接在tomcat的 server.xml中修改下面这段

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />其中加粗的是添加的内容。

修改完以后,ok了。

----

今天一个师弟 照我的方式改了,说还是不行。后来测试了一下发现,tomcat 没有问题,但是action的result那边出问题了,他是这样写的

<result type="redirect">listResponse.action?forumAreaId=${forumAreaId}&amp;forumPostsId=${topicId}&amp;isResponse=${isResponse}&amp;searchType=${searchType}&amp;key=${key}</result>

其中key这个值是中文的,也就是说没有通过param 标签来写。就出问题了。不知道为什么,所以还是使用param来设置参数比较好。

------------------------------------------------------------------------------------------------

中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种

编码方法),这样转来转去就乱码了^_^。解决方法如下:
   1. 在struts2里面,最好将所有字符都设成utf-8。
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page pageEncoding="UTF-8" %>
   1.1 在jsp页面设定字符编码。这边有必有说明的是如果是jsp+java bean+servlet的方案,中文乱码很好解决,统一设成gb2312就可以了。
    1.2 使用struts框架字符集不能设成gb2312,要改成utf-8。
   2. 在struts.properties 添加:
struts.devMode=false
struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true
struts.ui.theme=simple

struts.locale=zh_CN
struts.i18n.encoding=UTF-8

struts.serve.static.browserCache=false
struts.url.includeParams=none

其中locale、encoding就是字符集的设定了。

3. 在web.xml加个filter

  <!-- zh-cn encoding -->
    <filter>
        <filter-name>struts-cleanup</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ActionContextCleanUp
        </filter-class>
    </filter> 
    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

-------------------------------------------------------------------------------------------------

struts2标签不显示Label的解决方法

最近发现struts2的标签不管是<s:textfield>还是<s:password>一概不显示label了,连换行都不换了。
查找原因有三种情况:
1、发现原来struts.properties下多了这句话:
struts.ui.theme=simple
2、struts2.xml 中有
 <constant name="struts.ui.theme" value="simple" />
3、 jsp页面form标签有属性 theme="simple"如果想不显示Label值 就加上
-------------------------------------------------------------------------------------------------

spring+hibernate+struts2应用mysql数据库乱码问题 -hxzon动手 -gdo

hxzon:
在spring配置文件里url末尾添加
?characterEncoding=gbk,没有变化。
在struts配置文件里写
<constant name="struts.i18n.encoding" value="UTF-8" />
还是乱码。
最后发现jsp页面里没改过来。
改为<%@ page language="java" pageEncoding="UTF-8"%>
不再乱码,而且去掉spring里写的那一句,也没乱码。
补充:spring中应该用转义字符才行。
<property name="url"
            value="jdbc:mysql://localhost/mysql?useUnicode=true&amp;characterEncoding=gbk"/>
数据库默认latin1,数据库建表默认utf8,连接使用gbk,中文不再乱码。
---相关资料-----------------------------------
       今天用spring+hibernate+struts2写了一个简单的示例程序,使用spring来管理hibernate处理数据,整合了 struts2,用了很长时间的webwork,使用struts2也还算是顺手,显示测试数据很顺利,当开始测试录入数据功能时,录入汉字发生了问题, 录入的汉字全部成了乱码。

最开始认为是在tomcat中中文传输出现了问题,加入了中文过滤器,但问题没有解决,忽然想到了在struts2的属性文件中已经设置了编码为gbk:

struts.properties
struts.i18n.encoding=GBK  
struts.objectFactory=spring

应该不是在传输过程出的问题,在后台输入传入Action和Dao的数据,也全部能正常显示。

然后怀疑是mysql的设置问题,查找设置mysql的数据库编码设置方法,在设置后仍没有解决问题。

直接在mysql中执行Insert into user (‘nam‘) values(‘汉字‘),mysql执行后数据显示正常,说明数据库的编码也正确。

郁闷了,到底问题处在哪里?在执行hibernateTemplate的save()方法之前,没有出现中文乱码问题,在数据库这方面也测试没有中文乱码问题,只有在hibernate持久化层这里的问题了。

查找持久化层传输数据到数据库服务器出现乱码的问题,终于找到了问题:

hibernate持久化层在传输过程中未设置编码格式,这样在传输数据到数据库服务器后已经是乱码了,在oracle和sqlserver里没有出现传输乱码问题,所以没有想到会使这里的问题。

修改spring中关于数据源的配置参数:

数据库链接方式:

jdbc:mysql://localhost:3306/springexample?characterEncoding=utf-8

在执行数据录入后,终于中文显示正常了。

在应用hibernate管理mysql数据库是不仅要注意web服务器和数据库的编码问题,同样要注意持久化层数据传输的编码问题。

时间: 2024-12-28 11:36:01

struts2乱码的相关文章

Struts2乱码问题的解决办法

乱码问题的起因在于数据在web系统的各个层中间传递的时候编码不同,比如页面使用GB18030而中间层使用UTF-8.由于struts2默认使用的就是UTF-8编码,所以在页面如果使用的是其他的编码格式,那么表单提交后就会产生乱码了. 我们使用过滤器来解决这个问题. 以页面使用GB18030为例,两个步骤: 1.在struts.xml中添加:<constant name="struts.i18n.encoding" value="GB18030"/> 2.

struts2乱码问题

简介:做了个功能,用的struts2,表单提交到后台,接收后打印出来的数据乱码. 解决步骤: 1. struts.xml中配置<constant name="struts.i18n.encoding" value="utf-8" /> 结果:乱码 2. web.xml中配置CharsetEncodingFilter过滤器 结果:还是乱码 3. jsp页面编码 pageEncoding="UTF-8" 结果:仍然乱码 4. <fo

Struts2中文乱码问题源码分析___转

前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器 (CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Action,但是在Action中得到的中文全部是乱码,前 台的页面编码都是GBK没有问题.这是为什么呢?下面我们就通过阅读FilterDispatcher和CharacterEncodingFilter 这两个过滤器的源代码,了解其实现细节,最终得出为什么中文还是乱码! web.xml配置: 1     

SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c

struts2拦截器の简单实现(日语系统,请忽略乱码,重在实现)

1.创建类实现interceptor接口或者继承abstractinter~~~类 package com.mi.intercepter; import java.util.Date; import com.mi.action.LoginAction; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class Inter

关于struts2中表单提交时,中文乱码问题的解决

http://blog.csdn.net/hjw506848887/article/details/8966194 今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答案. 下面的我的jsp页面: [html] view plaincopyprint? <form action="indexAction.action"> <input name="dimName" type="text" />

struts2 中文乱码问题,自定义过滤器通用解决方法

问题描述 在JSP中使用form表单向后台action中传递中文参数,后台action接收到参数出现中文乱码.JSP页面统一采用了utf-8编码格式.由于struts2默认采用的编码为utf-8,根据官方文档的提示,编码格式改为GBK,就能解决中文乱码.遂改之.但是,改为GBK后仍然出现中文乱码.很是不解(后来去官网查了一下,发现这是个BUG). 环境描述 服务器采用tomcat6.0,struts的版本为2.3.12,spring的版本为2.5.6 解决办法 1.如果你的项目采用了spring

[Java Web]Struts2解决中文乱码问题

1.设置struts的字符编码,可以在struts.xml中增加以下代码: <constant name="struts.i18n.encoding" value="GBK" /> 或者找到struts的默认配置文件,位置在 struts2-core-2.3.16.3.jar 里面 org.apache.struts2 包中的 default.properties 文件.修改以下配置: ### This can be used to set your d

Struts2文件下载中文名乱码

Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱码问题需要设置编码格式,道理都懂,但是怎样实现呢?其实很简单,上代码: <result name="download" type="stream"> <param name="contentType">application/