日期:2014-05-16  浏览次数:20442 次

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>

好了,其实乱码是个头疼的问题, 但只要用心,总用找到解决办法的,以上几种办法虽然不是最好的 ,但对付一般的情况还是可以的,希望能够对你有用。另外,如果说的有不当之处,欢迎修正!

?

?