nighty
折腾的年华
posts - 37, comments - 143, trackbacks - 0, articles - 0
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2011年1月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
Eclipse(7)
Flex(2)
Java(6)
Struts2(2)
SWT/JFace(1)
信息安全(1)
心得(5)
操作系统(3)
数据库(3)
服务器部署(5)
测试(2)
系统集成(2)
软件架构(2)
随笔档案
2013年4月 (2)
2013年3月 (1)
2012年4月 (1)
2011年10月 (1)
2011年8月 (1)
2011年5月 (3)
2011年4月 (1)
2011年3月 (2)
2011年2月 (1)
2011年1月 (1)
2010年11月 (1)
2009年11月 (1)
2009年10月 (1)
2009年8月 (1)
2009年7月 (1)
2008年8月 (2)
2008年7月 (2)
2008年6月 (2)
2008年5月 (4)
2008年4月 (1)
2008年1月 (1)
2007年11月 (1)
2007年10月 (2)
2007年8月 (2)
文章分类
测试
搜索
最新评论
1. re: 关于commons dbutils组件的一个小缺陷分析
dbutils中连传入到的参数都不区分大小写??
--starhe
2. re: B/S,C/S架构混合使用[未登录]
评论内容较长,点击标题查看
--eagle
3. re: B/S,C/S架构混合使用[未登录]
补充一下:用的语言是java,开发环境是eclipse
--eagle
4. re: B/S,C/S架构混合使用
评论内容较长,点击标题查看
--Unbotrusive
5. re: struts2中重定向中文参数乱码梳理[未登录]
有用啊
--tony
阅读排行榜
1. ubuntu安装Java开发环境(38176)
2. Eclipse3.3安装中文语言包(13933)
3. Http状态码思维导图(13743)
4. B/S,C/S架构混合使用(13723)
5. 添加完整的Eclipse RCP帮助系统(8924)
评论排行榜
1. B/S,C/S架构混合使用(25)
2. 无奈只能放弃iBatis(24)
3. Eclipse3.3安装中文语言包(13)
4. httpclient3.1使用小结(8)
5. JDBC连接DB2的一些总结(8)
struts2中重定向中文参数乱码梳理
Posted on 2011-01-14 16:41
寒武纪
阅读(6758)
评论(3)
编辑
收藏
所属分类:
Struts2
在项目中刚好有一个地方需要在服务器端处理一个请求后,重定向到另一个Action,这样浏览器的url才会变成另一个url,用户重新刷新时,才不会弹出一个对话框问你是不是要重新提交form。于是就自然而然地用了redirectAction。大概如下:
1
<
result
name
="myInfoSuccess"
type
="redirectAction"
>
2
myapp_myInfo.action?msg=${msg}
3
</
result
>
因为重定义会丢失所有的请求参数和值栈,所以这里转向时,加了一个请求参数msg,msg在要重定向的action中设置。
问题来了,重定向到myapp_myInfo.action时,这个Action里面取出msg参数时变成乱码!!! 不论中文或是英语还是数字,全是乱码,折腾了一翻,
URLEncoder
、
URLDEncoder
进行URL Base64编码和解码处理,包括new String(msg.getBtye("ISO-8859-1"), "UTF-8")这种处理方式仍无法奏效。google了一下并且抱起书本认真看了看struts2重定向问题后。大概有了个思路。
所有的重定向操作都会丢失所有的请求参数、请求属性等,当然包括Action的处理结果也会丢失。
首先搞清楚redirect、redirectAction的区别:
1. redirect类型struts2是调用HttpServletResponse的sendRedirect(String)方法来重定向到指定的资源,可以是一个视图结果,也可以是其它类型的Action;
2. redirectAction同样是重新生成一个全新的请求。但是struts2内部却是使用ActionMapperFactory提供的ActionMapper来重定向,它只能跳转到另外一个Action;
由于redirectAction使用的是ActionMapper来重定向,也就同时使用ActionMapper的编码方式重新进行编码,这就导致了后面在取出参数时变成乱码,没有具体阅读它的源代码,但是多次不同的编码再想重新还原出来就有点麻烦了。而redirect是使用HttpServletResponse来重定向,就不存在上面的问题。最后改为redirect来重定向,结果如下:
1
<
result
name
="myInfoSuccess"
type
="redirect"
>
2
<
param
name
="location"
>
myapp_myInfo.action?msg=${msg}
</
param
>
3
<
param
name
="encode"
>
true
</
param
>
4
</
result
>
注意:在myapp_myInfo.action对应的Action必须对msg参数做一次转码,因为前面的Action过来时就做了URL base64编码,如果直接发给浏览器,就会在浏览器看到一串带%的URL base64编码字符,所以要加上
1
String msg
=
URLDecoder.decode(getMsg(),
"
UTF-8
"
);
2
setMsg(msg);
把它设置回为中文,浏览器才能正常。
还得提到另一个重定向类型chain,它是Action链,还能维持当前的值栈不变。不过用它重定向后,虽然跳到其它Action,但是在浏览器端的URL是不会变化的,这样开头提到的那个问题仍是无法解决的!
刚进场的时候戏就落幕
Feedback
#
re: struts2中重定向中文参数乱码梳理
回复
更多评论
2011-01-16 12:05 by
最有效的减肥药
不错,学习了
#
re: struts2中重定向中文参数乱码梳理[未登录]
回复
更多评论
2013-08-30 14:34 by
allen
还是搞不定啊
#
re: struts2中重定向中文参数乱码梳理[未登录]
回复
更多评论
2013-10-07 17:49 by
tony
有用啊
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
struts2中重定向中文参数乱码梳理
Struts2+FreeMarker中利用plainText处理Ajax的一个技巧
Powered by:
BlogJava
Copyright © 寒武纪