`
zgqynx
  • 浏览: 1366419 次
  • 性别: 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中文问题与国际化问题——终极解决方案深度解析 #### 引言 在Web应用开发中,特别是使用Struts框架时,中文显示和国际化(Internationalization,简称i18n)问题是开发者常遇的挑战。本文将深入探讨解决...

    struts2国际化 标签 页面 处理类

    总结来说,Struts2的国际化功能通过配置、JSP标签和Action类的方法协同工作,为多语言应用提供了一套完整的解决方案。开发者可以根据项目需求,灵活地定义和引用资源文件,以便在不同的语言环境中显示适当的文本。

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

    ### Struts架构下国际化的一种解决方案 #### 概述 随着全球化的不断推进,软件系统越来越多地需要支持多种语言和地域特性。在Java Web开发领域,尤其是使用Struts框架的应用程序中,实现国际化...

    java struts国际化 struts 源码 演示

    除了基本的资源包方式,还可以结合Spring框架的MessageSource,或者使用第三方库如i18n-binder,提供更灵活的国际化解决方案。 通过这个Java Struts国际化演示项目,你可以深入理解Struts如何处理不同语言的用户...

    struts国际化功能

    Struts是Java Web开发中的一个流行MVC框架,SSH(Spring、Struts、Hibernate)是其常见的集成解决方案。Struts的国际化(Internationalization,简称i18n)功能允许开发者为不同地区的用户提供本地化的界面和内容,...

    struts国际化的使用

    ### Struts国际化的使用 #### 一、Struts框架简介 Struts是一个开源的MVC...Struts框架的强大之处在于它提供了一套完整的解决方案,使得开发者能够专注于业务逻辑的编写,而不用担心语言和地区的差异带来的复杂性。

    struts数据库国际化

    Struts框架本身提供了一套完整的国际化解决方案,包括资源文件、标签库等。但在某些情况下,需要对数据库中存储的数据进行国际化处理,尤其是在数据直接存储为字符串时。 #### 四、数据库字符国际化组件 根据提供...

    struts,ajax乱码解决方案

    【Struts和Ajax乱码解决方案】 在Web开发中,乱码问题始终是一个常见的困扰,特别是对于使用Struts和Ajax技术的开发者来说。乱码问题主要出现在数据的输入、传输和展示过程中,涉及到编码格式的选择和一致性。以下...

    Struts2国际化

    Struts2 国际化实现详解 ...Struts2 框架提供了一个灵活的国际化解决方案,我们可以通过资源文件和拦截器来实现语言切换。同时,我们也可以使用 `Locale` 对象来接收语言参数,并根据语言参数加载相应的资源文件。

    struts2的国际化

    Struts2框架作为Java Web开发中的佼佼者,提供了一套简洁且强大的国际化解决方案。本文将通过一个简单的HelloWorld示例来深入探讨Struts2的国际化功能。 #### 二、Struts2国际化基础 **1. 国际化资源文件** - **...

    struts2国际化多语言支持源码(拷过去即可运行)

    它在处理用户请求、业务逻辑和视图展示方面提供了一种结构化的解决方案。在这个"Struts2国际化多语言支持源码"中,我们可以深入理解如何在Struts2应用中实现多语言支持,这对于创建面向全球用户的Web应用至关重要。 ...

    Struts各种问题解决方案

    下面将详细讨论一些常见的Struts问题及其解决方案。 1. **配置问题**: - **Action配置错误**:确保struts.xml文件中的Action配置正确,包括action名称、result类型、namespace等属性。如果找不到Action,检查是否...

    Struts2国际化详解

    总之,Struts2的国际化功能通过资源包、拦截器、`getText()`方法以及`s:text`标签等手段,提供了一套完整的解决方案,使得开发者能够轻松地构建多语言应用。了解并掌握这些知识点,将有助于提升你的Java Web开发能力...

    (三)Struts2国际化(i18n) :简单语言包的实现

    Struts2是一个强大的MVC框架,它为Java Web应用程序提供了结构化开发的解决方案。在Struts2中,国际化(i18n)是处理多语言环境的重要特性,使得同一个应用可以适应不同地区用户的需求。本篇文章将深入探讨如何在...

    第六章java框架_struts国际化与连接池_实验指导书.docx.docx

    为了满足这一需求,Struts框架提供了一套完整的国际化解决方案。 **实验步骤**: 1. **熟悉本地编码类别**: - 了解不同的字符集和编码方式,如UTF-8、GBK等。 - 掌握如何在Struts配置文件中指定字符集。 2. **...

    struts2完整压缩包

    9. **国际化的支持**: Struts2提供了内置的国际化支持,允许根据不同的语言和地区显示相应的文本。 10. **异常处理**: Struts2提供了一套完善的异常处理机制,可以在全局范围内统一处理异常,提高代码的健壮性。 ...

    struts2环境搭建及国际化

    ### Struts2环境搭建及国际化知识点详解 #### 一、Struts2简介与环境搭建 **1.1 Struts2框架概述** Struts2是由Apache软件基金会提供的一个开源的MVC框架,它继承了Struts1的设计理念,并进行了大量的改进和优化...

    Struts2 最简单的国际化Demo

    它基于Model-View-Controller (MVC)架构模式,提供了强大的控制层解决方案,帮助开发者更有效地管理应用程序的业务逻辑和用户界面。国际化(i18n)是任何大型应用程序不可或缺的一部分,它允许软件根据用户的地区...

    Struts2乱码终极解决办法

    本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...

Global site tag (gtag.js) - Google Analytics