struts2中关于jsp页面向action传值出现乱码问题
在JSP页面输入中文并传给后台的时候,常常会出现乱码问题,产生乱码的原因:java在进行传值的时候,默认用的是iso-8859-1的编码形式进行传输,而我们jsp页面常用的则是utf-8的编码形式。所以,两者不对应,在解析的时候就出现乱码现象。
有以下几种解决方案:
一:在struts.xml文件中添加
<constant name="struts.i18n.encoding" value="utf-8"></constant>
注:这里value="urt-8"指的是页面的编码格式,如果页面的编码格式是GBK,则写GBK
二:在Action中重新转码:利用.new String(name.getBytes("iso-8859-1"),"utf-8");
例:this.name= new String(name.getBytes("iso-8859-1"),"utf-8");
注:这里的name是从页面传过来的参数,只要在这里重新转码就可以了,另外,这里的utf-8依然是页面的编码格式。
但每次都这样转,太麻烦了,因此可以写一个工具类,将乱码转成utf-8
public class Tools{
//提供一个方法,将乱码转化成utf-8
public static String getNewString(String input){
String result = "";
try{
result = new String(input.getBytes("iso-8859-1"),"utf-8");
}catch(Exception e){
e.printStackTrace();
}
return result;
}
在用的时候直接调用就行了:userName = Tools.getNewString(name);
三:就是在tomcat中修改server.xml, 个人不推荐这得方法,其一:不稳定,其二:在工作中修改服务器的配置文件不是一件容易的事情,所以这里就不举例说明。
四:CharacterEncodingFilter的使用,但这个东西不是万能的,但有时候没有它就会很麻烦,所以还是加上,以防万一,但需要说明一点:这个filter只对post请求有效, get请求一律忽略。例:在web.xml中如下配置:
<!--字符编码-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>