处理struts开发中的中文乱码问题

    最近借着一周调休假的时间,重新复习了一下很久以前学习的有关structs的开发。在做一个简单的留言本的登录部分时,遇到了有关中文显示乱码的问题。在解决问题之后,我又参考了网上一些相关文章,将常见的此类问题做了些整理。

    在进行struts开发的过程中,中文乱码问题常见的为三种情况:页面显示中文乱码、传递参数中文乱码和国际化资源文件乱码。对此,之前的刘伟老师提出,解决的整体思想,就是,把编码的方法统一,推荐使用utf-8编码。
    在jsp页面中,默认的编码格式为ISO-8859-1,当页面中要处理中文时,就会显示乱码,解决方法比较简单,将页面开始<%.@ page language="java" import="java.util." pageEncoding="ISO-8859-1">中编码改为utf-8即可。
    如果在传递参数的时候出现中文乱码,比如做一个表单输入username和password,username使用中文,在action中接收的内容产生乱码。如图

    在username中输入中文‘苏永’,在action中编写输出所填信息的语句后,输出结果显示乱码,如图

    当属于链接或者get方式传递时,需修改 Tomcat中server.xml文件,在修改connector 端口号的那段代码后加入URIEncoding="UTF-8",如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
    当用post方法传递参数出现乱码时,需编写一个过滤器Filter。因此在处理get和post方法传递时,既要修改server.xml,又要编写过滤器。
    编写过滤器,即新建一个类,让它实现javax.servlet中的Filter接口。这时,我们只需要在这个类中的doFilter()方法加入语句request.setCharacterEncoding("UTF-8");和chain.doFilter(request, response);即可。如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   request.setCharacterEncoding("UTF-8");
   chain.doFilter(request, response);
}
     然后把这个Filter加入到web.xml中来,方可被调用。打开项目中的web.xml文件,在前面加上如下代码:
<filter>  
<filter-name>characterEncoding</filter-name>  
<filter-class>com.su.example.CharacterEncodingFilter</filter-class>  
</filter>  
<filter-mapping>  
<filter-name>characterEncoding</filter-name>  
<url-pattern>/*</url-pattern>                            // /*,表示处理所有的文件
</filter-mapping>  
    经测试,传参时产生的中文乱码问题即可解决。
    第三种情况是国际化时出现中文乱码。国际化问题,通俗的讲是处理文件在不同语言浏览器上的显示问题,比如在中文浏览器上,我们要看到中文显示,对应在英文浏览器上要显示英文。
    我们要使在jsp页面中的文字也根据本地文字相应地显示本地文字,实现国际化,有两种方法,一是利用JDK的native2ascii工具进行编码转换,二是利用Eclipse ResourceBundle Editor插件工具。
    第一种方法,把本来要显示的文字,写在<bean:message>中,里面的key属性指向了我们的ApplicationContex.properties文件。如下:
<bean:message key="strutslearn.login.name"/>
<bean:message key="strutslearn.login.password"/>
     然后,打开项目中的资源配置文件ApplicationResources.properties,依据上面所写key值,设定成我们要的默认值(显示英文),如下:
#Resource for Parameter 'com.v512.example.struts.ApplicationResources
#Project webexample2
example.login.username=username
example.login.password=password
    我们再来做中文,复制一份,改名为ApplicationResources_zh.properties,并修改代码为:
#Resource for Parameter 'com.v512.example.struts.ApplicationResources
#Project webexample2
example.login.username=用户名
example.login.password=密码
    打开DOS窗口,cd到资源文件所在目录,运用JDK的native2ascii工具把我们新建的资源文件改成另一个名字的资源文件,例如bank.properties。命令如下:
>native2ascii -encoding gbk ApplicationResources_zh.properties bank.properties
    此时的bank.properties资源文件,我们作为新的ApplicationResources_zh.properties,删除旧的ApplicationResources_zh.properties,自动生成的代码如下:
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
example.login.username = \u7528\u6237\u540D
example.login.password = \u5BC6\u7801
    这就利用了JDK的native2ascii工具把汉字编码变为Unicode编码。然后重起tomcat,运行,即可实现国际化。
    第二种简单点的方法就是安装ResourceBundle Editor插件。下载的官方网址为: http://sourceforge.net/projects/eclipse-rbe/,下载ResourceBundleEditor_v0.7.7后解压,并拷贝plugins至Eclipse的安装目录下。重启Eclipse,在默认的ApplicationResources.properties上右键open with打开ResourceBundle Editor。此时,我们会惊奇的发现,可以方便的可视化添加国别和语言种类,呵呵。
    以上就是我整理的关于处理structs中文乱码问题的解决方案。
   
 

你可能感兴趣的:(中文乱码,解决,方案,休闲,structs)