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

http://blog.csdn.net/hjw506848887/article/details/8966194

今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答案。

下面的我的jsp页面:

[html] view plaincopyprint?

  1. <form action="indexAction.action">
  2. <input name="dimName" type="text" />
  3. <br />
  4. <input name="submit" type="submit" />
  5. </form>

而传到indexAction的dimName参数却是一堆乱码,

我的struts.xml关于编码的有如下配置:

[html] view plaincopyprint?

  1. <constant name="struts.i18n.encoding" value="UTF-8" />

首先我所有的网页统一用的是UTF-8。。。

正常来说是没问题的,但是我在indexAction中

[java] view plaincopyprint?

  1. System.out.println(dimName);

打印出的结果却是一堆乱码,花了我好长时间,也许是我经验不足吧!后来才发现,我把上面的jsp页面改为:

[html] view plaincopyprint?

  1. <form action="indexAction.action" method="post">
  2. <input name="dimName" type="text" />
  3. <br />
  4. <input name="submit" type="submit" />
  5. </form>

乱码竟然消失了!!!我无语啊,看来post和get的区别还在于乱码问题。
怎么解决呢???
小弟找了一个可行的方法:
如果的都是用的Post的话,一切都没有问题!什么都不用动。但是如果你是用的get,就去你的tomcat目录下的conf/server.xml中找到下面一段:

[html] view plaincopyprint?

  1. <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443" URIEncoding="UTF-8"/>

本来的URLEncoding="UTF-8"是没有的,加上这一句话,就行了,下面是为什么这么做的原因:
<constant name="struts.i18n.encoding" value="UTF-8" />
表示把struts2设置为utf-8,相当于response.setCharacterEncoding("UTF-8"),对HTTP请求的数据进行编码,但是get请求的数据是直接在URL中,通过配置struts2配置为utf-8或CharacterEncodingFilter拦截器都不会对URL进行拦截并转换。对于很多人来说会觉得用 request.setCharacterEncoding("字符集")可以指定解码方式,其实是不可以的,当看了servlet的官方API说明有对此方法的解释:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().可以看出对于get方法它是无能为力的。那么到底用什么编码方式解码数据的呢,这是tomcat的事情了,默认缺省用的是 iso-8859-1
所以出现了上面的配置方式。
当然了还的一种:

[java] view plaincopyprint?

  1. new String(request.getParameter("name").getBytes("iso-8859-1"),"客户端指定的URL encode编码方式")

总之,对于post来说,乱码问题是很容易解决的,关键在于get,因为所有页面上的编码设置对于get方法是彻底无效的。

时间: 2024-10-11 01:27:30

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

get/post时中文乱码问题的解决办法

常有的方法,get请求用在tomcat的编码改为utf-8 即可 post 过滤器就可以 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置:而在Servlet中

Struts2表单提交的中文字符数据用hibernate存储在数据库中是乱码的问题。

1.先检查中文字符出现乱码的位置,于是就在action中用printf方法打印表单提交的中文数据到控制台,发现是乱码. 2.于是问题就转换成了先解决jsp表单提交的中文数据到action中出现乱码的问题, 3.百度了一下,发现是因为我的struts.xml文件建立的时候直接在网上copy的模板,encoding属性设置的是UTF-8我忽略了,而我jsp的encoding属性设置的是gbk,导致两者不一致(因为之前入门的时候教程里面讲的就是gbk方式,于是我也沿用了这种方式.)我eclipse的文

idea Terminal git 提交时 中文乱码

如图,遇到 idea中,git commit 时 中文输入,再删除的时候 就容易乱码  解决办法: 在git安装目录下找到etc/bash.bashrc文件,在文件的最后添加: export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8" 在Terminal控制台输入:set LESSCHARSET=utf-8 退出控制台,重新进入即可. 原文地址:https://www.cnblogs.com/duoduo264/p/

JSP表单提交出现中文乱码的解决方法

1)post方式 在servlet的doGet( )  doPost( )  中增加以下代码: response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); 2)get方式 在tomcat中con/server.xml中修改 <Connector port="8088" protocol="HTTP/1.1&qu

get/post时中文乱码问题的解决办法(转载)

1.文章1 最近遇到一个问题:用get方法传递中文有问题,用post没有问题. 问题简单的描述是这样的: <a href="userGroup.jsp?userGroupName=<%=userGroupName%>">aa</a> 这里userGroupName是中文 在userGroup.jsp页面得到的userGroupName却是乱码. 每个页面也都有<%@ page language="java" pageEnco

jsp表单传值时中文乱码问题解决方法

解决方法一: 解决方法二:(一劳永逸型) 修改tomcat server.xml文件 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8" /> 添加最后黄线高亮部分 原理图: 图片来自于:https://www.jb51.net/

get提交时中文传值乱码的有关问题

get提交时中文传值乱码的问题 get提交时中文传值乱码的问题 url=curWarnList.action paramBean.bsIndex=1&paramBean.siteName=萧山A基站,href连接提交其实是get提交方式,会造成中文乱码.这个主要是编码方式不统一.JSP(手动设置).Java(字符串是unicode编码).操作系统..数据库().Tomcat等等,各种不同环境介质都有不同的编码方式,如果编码方式不统一,就会造成乱码. url参数中文是以ISO8859-1的编码方式

表单以get方式提交出现中文乱码解决办法

如果表单是以get方式提交就会出现中文乱码 这时可以在tomcat中配置解决中文乱码问题. 解决办法方法如下: 在tomcat文件夹下的conf中找到server.xml文件  在端口处添加  <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8&qu

form提交数据中文乱码问题总结

一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据.数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是