加入联盟
登录
本站特色:极好的技术研究氛围!所有技术发帖,必有回复!
做最受欢迎的Java论坛
本站公告
论坛
搜索
博客
帮助
导航
默认风格
blue
brown
gray
green
greyish-green
orange
pink
purple
red
violet
默认风格_BQm5
私人消息 (0)
公共消息 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
疯狂Java联盟
»
MVC框架讨论版
» Struts 2 d 中文问题解决方法
返回列表
发帖
pjwok
发短消息
加为好友
pjwok
当前离线
UID
14
帖子
151
主题
0
精华
0
积分
265
疯狂金币
73
疯狂水晶
0
疯狂勋章
0
阅读权限
30
性别
男
在线时间
116 小时
小试牛刀
帖子
151
主题
0
精华
0
积分
265
疯狂金币
73
疯狂水晶
0
性别
男
在线时间
116 小时
1
#
跳转到
»
倒序看帖
打印
字体大小:
t
T
发表于 2010-4-22 15:34
|
只看该作者
八年沉淀,王者归来——疯狂软件教育中心强势回归,李刚老师携疯狂Java团队
“十年磨一剑”
地打造最强悍的软件培训。
[Struts2和WW]
Struts 2 d 中文问题解决方法
终于在自己的项目中引入struts2了,但一上来就来一个中文乱码的问题。google了半天找了几个不痛不痒的结果,很是不满意。又调试了半天,终于 解决了中文乱码的问题。总结一下,中文乱码,首先要区分是页面乱码、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>
跟上述方法,类似还有在action中设定字符编符.
HttpServletResponse response = null;
response = ServletActionContext.getResponse();
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
通过上述方法,基本就可以搞定中文乱码的问题了。当然,也有例外(如web server的版本\数据库的版本等等)。象在我的一个项目碰到一个中文乱码,tomcate5.5是会乱码的,而在tomcate6中就不会。这边就涉及到tomcate connector字符的设置了。
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />
--------------------------------------------------------------------
后记之一:在使用struts2时,仍是遇到一种乱码。后来调试才发现,struts2的web.xml配置是有顺序的。
在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,因为要先调整字符集,然后进入Action。
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
--------------------------------------------------------------------
后记之二:这个方法是下下策了,只有在前面的方法都无效时才使用。
在action中直接使用request.getParameter()时;还是出现乱码。原因分析如下:
1、getParameter()是有带字符参数的。例:
String s = (String)request.getParameter("txt").getBytes("iso-8859-1");
2、String也可以带有字符参数。
String(byte[] bytes, String charsetName)
构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。
例:String s = new String("中文","utf-8");
3、综合上述两点,编写一个类来完成此项任务
public class ConvertCharacter{
public String Convert(String s){
String result;
byte[] temp ;
try{
temp = s.getBytes("iso-8859-1");
result = new String(temp,"utf-8");
}
return result;
}
1
评分人数
谢谢分享
疯狂金币 + 3
awp
收藏
分享
0
0
0
支持
反对
awp
发短消息
加为好友
awp
(键客)
当前离线
UID
993
帖子
524
主题
0
精华
0
积分
2669
疯狂金币
2002
疯狂水晶
0
疯狂勋章
0
阅读权限
100
性别
男
在线时间
403 小时
疯狂Java技术组长
帖子
524
主题
0
精华
0
积分
2669
疯狂金币
2002
疯狂水晶
0
性别
男
在线时间
403 小时
2
#
发表于 2010-4-23 14:24
|
只看该作者
八年沉淀,王者归来——疯狂软件教育中心强势回归,李刚老师携疯狂Java团队
“十年磨一剑”
地打造最强悍的软件培训。
我原来也遇到过,我是这样解决的
http://crazyit.org/thread-2919-1-1.html
Don't give me any chance!
身挑一狙,独行天下!
TOP
返回列表
中间层技术讨论版
新手报到、自我介绍版
JSP、MVC Web应用讨论版
Java Web技术讨论版
Java基础讨论版
疯狂书籍交流版
电子书、技术文档交流版
SSH、EJB企业应用讨论版
Java游戏、桌面应用讨论版
经验感受,闲聊吹水交流版
企业开发技术区
中间层技术讨论版
手机平台开发版
Java Web技术讨论版
MVC框架讨论版
持久化技术讨论版
Java基础讨论版
服务器、Web容器讨论版
HTML5/CSS3/Ajax前端技术讨论版
工作流、业务流程管理讨论版
软件工程、开发工具讨论版
Ruby、Rails技术讨论版
疯狂书籍交流版
电子书、技术文档交流版
其他技术讨论版
疯狂专区
线下聚会、活动建议发布版
经验感受,闲聊吹水交流版
新手报到、自我介绍版
团队培训、技术培训咨询版
招聘、外包信息发布版
项目开发专区
Java游戏、桌面应用讨论版
JSP、MVC Web应用讨论版
SSH、EJB企业应用讨论版
版务讨论区
公告发布版
版主申请版
建议版
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]