`
zgqynx
  • 浏览: 1341636 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts的国际化完整解决方案

    博客分类:
  • java
阅读更多
1.这是在网上找到的一种处理方法,测试已经通过!在网上有很多有关Struts的中文解决方案,但是很多都说得很零碎,不够完整。下面是我的一个完整解决方案。
      要使网页能够真正实现多语言,有三个地方都需要修改:
      1.在页面部分,一定要把页面的编码设成UTF-8,就是在开头加上这一句:<%@ page contentType="text/html; charset=UTF-8" %>。并且把所有的文字信息都放到resource文件中。
      以前我在写网页的时候,没有指定页面的编码,总是在获取表单的内容后,要人工的用new String(s.getBytes("ISO8859-1"))转换一下,这样是很繁琐的,而且很容易出错。网页中如果没有指定编码,那么默认的就是用ISO8859-1编码的。
      2.相应的资源文件需要用native2ascii转换一下。
      对于简体中文的资源文件:native2ascii -encoding gbk ApplicationResources_zh.properties convert\ApplicationResources_zh.properties
      对于繁体中文的资源文件:native2ascii -encoding big5 ApplicationResources_zh_tw.properties convert\ApplicationResources_zh_tw.properties

      3.需要用一个filter设置一下request的编码,我的代码如下:

1import java.io.*;
2import java.util.*;
3import javax.servlet.*;
4import javax.servlet.http.*;
5
6/**//**
7 * <p>Title: </p>
8 * <p>Description: </p>
9 * <p>Copyright: Copyright (c) 2003</p>
10 * <p>Company: </p>
11 * @author George Hill
12 * @version 1.0
13 */
14
15public class CharsetFilter implements Filter {
16
17  private FilterConfig filterConfig;
18
19  /**//**
20   * Request设置的Charset encoding
21   */
22  private String encoding;
23
24  /**//**
25   * 是否忽略设置Request的Charset encoding
26   */
27  private boolean ignore;
28
29  //Handle the passed-in FilterConfig
30  public void init(FilterConfig filterConfig) {
31    this.filterConfig = filterConfig;
32
33    encoding = filterConfig.getInitParameter("encoding");
34    String value = filterConfig.getInitParameter("ignore");
35    if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)
36        || "on".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) {
37      ignore = true;
38    }
39  }
40
41  //Process the request/response pair
42  public void doFilter(ServletRequest request, ServletResponse response,
43                       FilterChain chain) throws IOException, ServletException {
44    if (!ignore) {
45      request.setCharacterEncoding(encoding);
46    }
47
48    chain.doFilter(request, response);
49  }
50
51  //Clean up resources
52  public void destroy() {
53    this.filterConfig = null;
54  }
55}
56
      web.xml的相关片断如下:
注意:将以下代码放入web.xml文件中的</servlet-mapping>后面即可!
1  <filter>
2    <filter-name>charsetfilter</filter-name>
3    <filter-class>xxx.CharsetFilter</filter-class>
4    <init-param>
5      <param-name>encoding</param-name>
6      <param-value>UTF-8</param-value>
7    </init-param>
8    <init-param>
9      <param-name>ignore</param-name>
10      <param-value>false</param-value>
11    </init-param>
12  </filter>
13  <filter-mapping>
14    <filter-name>charsetfilter</filter-name>
15    <url-pattern>/*</url-pattern>
16  </filter-mapping>
      这样,在Action中处理表达的内容时,就不需要再做转换;而且在Action中处理数据给页面显示时,也不需要做转换。在页面中可以同时显示简体和繁体的内容,不需要去设置IE的编码。
      另外需要说明的就是如果数据库也支持编码的话,最好也是设成UTF-8编码,这样才能够完整的解决多语言的问题。例如MySQL 4.1以上的版本可以设置编码成utf8,在JDBC的URL中可以指定编码为UTF-8。
2.这是在网上找到的第二种说法
国际化的东西带来的问题还真的好多,各国语言不同,所使用的字符集都不一样,JAVA,mysql,Tomcat,浏览器等等用的字符集也不一样,这几天气得我都说了好几次不用什么Struts,mysql,Tomcat了,全部都是自己写出来好了,用统一的编码统一的字符集,可惜能力不够,说说而已,问题还是得解决。在网上查了好久,自己也实践了好多天,问题终于算是解决了。
强烈建议使用struts时所有编码均采用UTF-8(unicode)编码
因为要考虑到很多国的语言,一开始就把项目立足于国际化,遇到的乱码有
1、资源文件里读出来在页面上的乱码;
2、数据库读出来的乱码
3、数据库写进去的乱码
4、在ActionForm验证不通过Errors返回的乱码,也就是request,IE参数传递的乱码了。
下面是我的解决方法
1、资源文件里读出来在页面上的乱码:这个最容易解决了,把写好的ApplicationResources.properties文件,在DOC底下用 native2ascii -encoding gb2312 ApplicationResources.properties
ApplicationResources_zh_CN.properties 命令来个字符编码转换,将原来的中文转为Unicode编码就搞定了中文简体,繁体也用同样的命令,只是把 bg2312 改为 bgk 就可以了。
2、数据库读写的乱码,刚开始的时候因为受以前的SQL Server+JDBC 影响(在那时写入数据库是可以不用做什么工作的,只是在读出来的时候来个 gbk = new String(iso.getBytes("ISO-8859-1"), "GBK") 转换就行了)我也都在把读写都在转换,搞得好复杂也很麻烦,后来在连接池连接代码jdbc:mysql://localhost:3306/Database?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8那里加上一个&useUnicode=true&characterEncoding=UTF-8,保证了在数据库操作时候使用了统一的编码字符集,又解决了两个乱码问题,一举两得,嘿嘿。
4、request,response的乱码在网上找了好久,也有两个解决的办法,也是来个转换,还有种办法是写一个过滤器,我选择了后者,因为简单:),这方法用到两个文件,一个是 filter ,一个是 web.xml 文件,代码在后面。
5、至于JS的这个问题,还没办法,只好在jsp页面上改为<%@ page contentType=“text/html; charset=UTF-8“%>了,反正这样也没问题。
到此为止,乱码问题总算告一段落了,感觉蛮不错的,郁闷了这么久,终于可以高兴了好大一段子了。

package Filter;
import JAVAx.servlet.http.HttpServletRequest;
import JAVAx.servlet.http.HttpServletResponse;
import org.Apache.struts.action.*;
public class MyFilter extends ActionServlet
{
protected void process(HttpServletRequest request, HttpServletResponse response)
throws JAVA.io.IOException, JAVAx.servlet.ServletException
{ /**@todo Override this
org.Apache.struts.action.ActionServlet
method*/
request.setCharacterEncoding("UTF-8");
super.process(request, response); }
}
分享到:
评论

相关推荐

    struts中文问题,struts国际化问题——终极解决方案

    经典的struts中文问题,国际化问题终极解决方案

    Struts架构下国际化的一种解决方案.pdf

    Struts架构下国际化的一种解决方案.pdf..........

    struts2 做的国际化的例子

    struts2 做的小例子,里面有完整的解决方案 架构是struts2 spring,hibernate

    Jakarta Struts编程(中英文双版版电子书part1)

    Struts映射到Model 2设计模式的完整介绍 , 详细论述利用JSP使用Struts的知识,包括Struts标记库 Struts异常处理、验证和登录 Struts应用程序的国际化和本地化 完整论述新StrutsTiles模板库 ...

    Jakarta+Struts+编程[扫描版][中文]

    Jakarta+Struts+编程[扫描版][中文] 高效的Model 2编程并不是一项简单的任务,开发人员经常自己发现难于找到很多问题的最佳...Struts应用程序的国际化和本地化 完整论述新StrutsTiles模板库 Struts应用程序的打包和发布

    struts2-2.zip

    一个用来开发MVC应用程序的框架,提供web应用程序开发过长中的一些常见问题的解决方案,例如:对用户输入数据进行合法性的检验,对统一性的布局(table,form),可扩展性,国际化或本地化,支持Ajax等,我们只需要...

    Jakarta Struts编程(中英文双版版电子书part2)

    Struts映射到Model 2设计模式的完整介绍 , 详细论述利用JSP使用Struts的知识,包括Struts标记库 Struts异常处理、验证和登录 Struts应用程序的国际化和本地化 完整论述新StrutsTiles模板库 ...

    一个用struts+spring+hibernate编写的bbs源码

    2、支持多数据库:天乙社区6.0采用了Hibernate作为数据库持久化的解决方案,支持DB2、PostgreSQL、MySQL、Oracle、Sybase、Microsoft SQL Server、SAP DB、Informix、HypersonicSQL、Ingres、Progress、Mckoi SQL、...

    Spring攻略(第二版 中文高清版).part2

    11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理 458 11.8 改变永久性存储系统 461 11.8.1 问题 461 11.8.2 解决方案 461 11.4.3 工作原理 461 11.9 日志 ...

    Spring攻略(第二版 中文高清版).part1

    11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理 458 11.8 改变永久性存储系统 461 11.8.1 问题 461 11.8.2 解决方案 461 11.4.3 工作原理 461 11.9 日志 ...

    structs程序设计从入门到精通word文档

    3.3Struts-config.xml配置文件讲解 3.4struts中文问题","struts国际化问题"??终极解决方案 9 3.5为 Web 服务构建 Struts 应用程序 9 3.6Struts标记库是如何工作的 9 3.7Struts 9 3.8struts简单例子的分析(含代码...

    Struts in Action中文版

    2.3.2. Servlet 解决方案.................................................................................................44 2.3.3. Servlet 框架............................................................

    BBS-CS 天乙社区 v6.0(含源码)

    2、支持多数据库:天乙社区6.0采用了Hibernate作为数据库持久化的解决方案,支持DB2、PostgreSQL、MySQL、Oracle、Sybase、Microsoft SQL Server、SAP DB、Informix、HypersonicSQL、Ingres、Progress、Mckoi ...

    BBS-CS 天乙社区 v6.0.1(含源码)

    2、支持多数据库:天乙社区6.0采用了Hibernate作为数据库持久化的解决方案,支持DB2、PostgreSQL、MySQL、Oracle、Sybase、Microsoft SQL Server、SAP DB、Informix、HypersonicSQL、Ingres、Progress、Mckoi ...

    struts in Action

    2.3.2. Servlet 解决方案.................................................................................................44 2.3.3. Servlet 框架.............................................................

    Java EE Web开发实例精解完整光盘

     除了对JAVA EE Web编程基本技术的讲解淙外,还针对Web应用开发中如打印、图表、日志、上传、下载和国际化等常见功能特性的实现,综合运用多种JAVA EE开发技术,提出多种解决方案,并深入讲座分析,对开发人员动手...

    花田考试系统MyExam 1.0.1

    5.动态国际化,结合spring国际化机制+jstl+filter+jquery实现系统全文包括js文件的100%国际化配置,系统实现了10种语言(2.0版) 6.SeaJs模块化,可以整合各式插件,起到命名空间和按需加载的功效。 当然还有许多...

    jive.chm

    11 Jive 3.x UTF-8中文附件问题 12 JF3.1.3 JKB1.0.2 中文化 13 Jive3.0.8 MYSQL的中文解决方案 14 jive_kb_i18n_zh_CN_ori.properties &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;全文搜索 1 使您的Jive搜索支持中文 ...

    java面试题

    72.7. struts如何实现国际化 70 72.8. struts2.0的常用标签 71 72.9. action是单实例还是多实例,为什么? 73 72.10. Struts的validate框架是如何验证的? 74 72.11. dispatchAction是用什么技术实现的? 74 72.12. ...

Global site tag (gtag.js) - Google Analytics