关于表单的method属性的设置,而产生的中文乱码

J_pioneer 2005-05-13 02:59:58
我的环境是:eclipse3.0.1 、MyEclipse030804、tomcat5.0.1、struts1.2操作系统是windows2003
我有两个页面a.jsp,b.jsp。在a.jsp页面中有一个用<logic:iterate></logic:iterate>生成的一个表格,在表格的每行的最后一列中,有一个超级连接<html:link forward="b.jsp" name="beanname" useLocalEncoding="true">编辑</html:link>。在点击“编辑”的链接后,进入b.jsp页面。b.jsp页面中有一个表单,其中表单域都和名称为”beanname“的bean中的属性对应。
乱码的出现:在a.jsp页面中显示正常的中文,到了b.jsp页面中就是乱码(b.jsp页面中的表单的属性未设置)。而且在b.jsp页面中将乱码改正后提交可以正确的写到数据库中。
但是如果我这样写<html:form action="" method="get">中文显示正常。
说明:我在每个页面中都有<%@ page contentType="text/html; charset=GBK" %>,我b.jsp页面中的表单对应的Formbean中所有的setXXX()方法中,都强制了编码转换
new String(string.getBytes("ISO-8599-1"),"GBK")
现在对于小的数据量还可以通过测试,如果数据量很大method="get"就没法用了。望高手指点????
...全文
159 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
s_phoenix 2005-05-21
  • 打赏
  • 举报
回复
用struts的html:form标签,相当于method=post,此时你需要用过滤器进行转码操作(或者不用过滤器,在后台自己作转码)。如果是method=get,由于tomcat 5和tomcat 4的处理方法不一样,你需要修改server.xml,加上编码方式的指定。

原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。


解决办法:

首先所有的jsp文件都加上:


1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)

1)只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
2)在你的web.xml里加入如下几行:


<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

3)完成.

2 get方式的解决办法
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:

<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>


2)重启tomcat,一切OK。
haodong2006 2005-05-20
  • 打赏
  • 举报
回复
up
cyouyou 2005-05-20
  • 打赏
  • 举报
回复
为什么呢?难道doGet()有特殊要求?
minisun2000 2005-05-20
  • 打赏
  • 举报
回复
恩,tomcat4.x和tomcat5.x对get方法的处理方式不同,以前有人说过,我也做过实验,的确如此!
另外,楼主是不是心情好,来散分的,问题都自己解决了,还发上来了?
呵呵,抢分^_^
J_pioneer 2005-05-20
  • 打赏
  • 举报
回复
后来我发现是tomcat的版本的问题了,我以前实在tomcat4.x下做的测试和部署。一直没有遇到过如此奇怪的中文问题。
tomcat4.x下,对Form中的参数都是采用同一中处理方式。但是在Tomcat5.x中,当From的method属性设定为get方法时(把参数加在url后面传递)独立的进行出理。解决的思路就是是的,表单在传递参数的时候都用相同的处理方式(相同的编码)修改server.xml文件,在你自己的Connector中加上URIEcncoding=“ISO-8859-1”,或者是指定其他的编码方式。就搞定了。。。
MARS.nEIL 2005-05-13
  • 打赏
  • 举报
回复
帮顶..
J_pioneer 2005-05-13
  • 打赏
  • 举报
回复
我没有找到以前的帖子有我需要的内容。。。。等待中。。。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧