- 浏览: 1366419 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (551)
- 计划 (4)
- java (115)
- oracle (60)
- ajax (3)
- javascript (64)
- 计算机操作技巧集 (11)
- 近期关注话题 (10)
- 随想 (13)
- html (6)
- struts (15)
- hibernate (16)
- spring (2)
- game (0)
- Eglish (10)
- DisplayTag (6)
- jsp (18)
- css (3)
- eclipse (3)
- 其他知识 (8)
- 备用1 (12)
- 备用2 (1)
- 笑话-放松心情 (9)
- 设计 (1)
- 设计模式 (1)
- 数据结构 (0)
- office办公软件 (5)
- webwork (0)
- tomcat (2)
- MySql (1)
- 我的链接资源 (5)
- xml (2)
- servlet (0)
- PHP (13)
- DOM (0)
- 网页画图vml,canvas (1)
- 协议 (2)
- 健康 (3)
- 书籍下载 (1)
- jbpm (1)
- EXT (1)
- 自考 (2)
- 报表 (4)
- 生活 (64)
- 操作系统基础知识 (2)
- 测试 (2)
- guice (1)
- google学习 (2)
- Erlang (1)
- LOG4J (2)
- wicket (1)
- 考研 (1)
- 法律 (1)
- 地震 (1)
- 易学-等等相关 (1)
- 音乐 (1)
- 建站 (4)
- 分享说 (3)
- 购物省钱 (0)
- linux (1)
最新评论
-
zenmshuo:
如果使用SpreadJS这一类的表格工具,应该能更好的实现这些 ...
js中excel的用法 -
hjhj2991708:
第一个已经使用不了
jar包查询网站 非常好用! -
jiangmeiwei:
...
中文乱码 我的总结 不断更新 -
gary_bu:
...
response.sendRedirect 中文乱码问题解决 -
hnez:
多谢指点,怎么调试也不通,原来我在<body>&l ...
ExtJs IE ownerDocument.createRange() 错误解决方案
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); }
}
要使网页能够真正实现多语言,有三个地方都需要修改:
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); }
}
发表评论
-
TilesRequestProcessor - Tiles definition factory found for request processor ''
2011-11-03 15:39 2493TilesRequestProcessor - T ... -
jar包查询网站 非常好用!
2009-12-28 11:47 13392java jar包查询 根据类查询所在的java包 http ... -
tomcat 启动错误 java.lang.UnsupportedClassVersionError: Bad version number in .class
2009-11-27 08:53 2255请访问http://ddgrow.com/bad-versio ... -
arrayToString
2009-04-07 09:01 1416原文:http://leepoint.net/notes-ja ... -
native2ascii
2009-04-02 12:00 1176D:\>native2ascii 中国 \u4e2d\u ... -
java swing 架构
2009-03-04 15:03 2320下面是偶尔找到的一篇 相当好的文章 ,针对 java swin ... -
红帽企业5序列号
2009-02-27 09:11 2528这是从[url]http://www.21codes.com/ ... -
中文乱码 我的总结 不断更新
2009-02-23 09:51 2299java中文乱码问题 1、jsp中文乱码 <0& ... -
websphere 数据库连接
2009-02-19 17:47 2118问个问题: 应用服务器: websphere 连接池:pr ... -
打开java控制台的方法
2009-02-10 17:10 3041D:\Program Files\Java\jre6\bin\ ... -
log4j weblogic 问题
2009-01-21 15:08 1943问题是这样的 最初在tomcat5.5下面开发,使用了log ... -
log4j weblogic 问题
2009-01-21 15:07 0问题是这样的 最初在tomcat5.5下面开发,使用了log ... -
java.lang.NoClassDefFoundError in quartz
2008-12-24 15:35 2914quartz-1.5.2.jar tomcat5.5 当使 ... -
java 得到运行时系统中的内存信息
2008-12-19 20:54 1518这个在tomcat下面使用过,在引记录下来,以后方便查找 Ru ... -
log4j
2008-12-13 11:32 902讲解了用xml配置,还有例子,以及对 levelmin lev ... -
servlet 2.3 规范
2008-12-02 20:55 0servlet 2.3 规范 http://www.orio ... -
session 问题
2008-11-26 16:41 991问个问题,如下: 我要在一个A系统中,通过一个弹出窗口,超链接 ... -
java 反编译工具
2008-10-08 11:03 1993从哪找到的给忘了,用起来不错,放在这里,以后找起来方便 ,有需 ... -
thinking in java 读书笔记
2008-10-06 22:09 1340记录下来,以便以后查看 thinking in java 4t ... -
RSA 算法 java版本<转>
2008-09-23 18:28 2421原文地址:http://www.cs.princeton.ed ...
相关推荐
### Struts中文问题与国际化问题——终极解决方案深度解析 #### 引言 在Web应用开发中,特别是使用Struts框架时,中文显示和国际化(Internationalization,简称i18n)问题是开发者常遇的挑战。本文将深入探讨解决...
总结来说,Struts2的国际化功能通过配置、JSP标签和Action类的方法协同工作,为多语言应用提供了一套完整的解决方案。开发者可以根据项目需求,灵活地定义和引用资源文件,以便在不同的语言环境中显示适当的文本。
### Struts架构下国际化的一种解决方案 #### 概述 随着全球化的不断推进,软件系统越来越多地需要支持多种语言和地域特性。在Java Web开发领域,尤其是使用Struts框架的应用程序中,实现国际化...
除了基本的资源包方式,还可以结合Spring框架的MessageSource,或者使用第三方库如i18n-binder,提供更灵活的国际化解决方案。 通过这个Java Struts国际化演示项目,你可以深入理解Struts如何处理不同语言的用户...
Struts是Java Web开发中的一个流行MVC框架,SSH(Spring、Struts、Hibernate)是其常见的集成解决方案。Struts的国际化(Internationalization,简称i18n)功能允许开发者为不同地区的用户提供本地化的界面和内容,...
### Struts国际化的使用 #### 一、Struts框架简介 Struts是一个开源的MVC...Struts框架的强大之处在于它提供了一套完整的解决方案,使得开发者能够专注于业务逻辑的编写,而不用担心语言和地区的差异带来的复杂性。
Struts框架本身提供了一套完整的国际化解决方案,包括资源文件、标签库等。但在某些情况下,需要对数据库中存储的数据进行国际化处理,尤其是在数据直接存储为字符串时。 #### 四、数据库字符国际化组件 根据提供...
【Struts和Ajax乱码解决方案】 在Web开发中,乱码问题始终是一个常见的困扰,特别是对于使用Struts和Ajax技术的开发者来说。乱码问题主要出现在数据的输入、传输和展示过程中,涉及到编码格式的选择和一致性。以下...
Struts2 国际化实现详解 ...Struts2 框架提供了一个灵活的国际化解决方案,我们可以通过资源文件和拦截器来实现语言切换。同时,我们也可以使用 `Locale` 对象来接收语言参数,并根据语言参数加载相应的资源文件。
Struts2框架作为Java Web开发中的佼佼者,提供了一套简洁且强大的国际化解决方案。本文将通过一个简单的HelloWorld示例来深入探讨Struts2的国际化功能。 #### 二、Struts2国际化基础 **1. 国际化资源文件** - **...
它在处理用户请求、业务逻辑和视图展示方面提供了一种结构化的解决方案。在这个"Struts2国际化多语言支持源码"中,我们可以深入理解如何在Struts2应用中实现多语言支持,这对于创建面向全球用户的Web应用至关重要。 ...
下面将详细讨论一些常见的Struts问题及其解决方案。 1. **配置问题**: - **Action配置错误**:确保struts.xml文件中的Action配置正确,包括action名称、result类型、namespace等属性。如果找不到Action,检查是否...
总之,Struts2的国际化功能通过资源包、拦截器、`getText()`方法以及`s:text`标签等手段,提供了一套完整的解决方案,使得开发者能够轻松地构建多语言应用。了解并掌握这些知识点,将有助于提升你的Java Web开发能力...
Struts2是一个强大的MVC框架,它为Java Web应用程序提供了结构化开发的解决方案。在Struts2中,国际化(i18n)是处理多语言环境的重要特性,使得同一个应用可以适应不同地区用户的需求。本篇文章将深入探讨如何在...
为了满足这一需求,Struts框架提供了一套完整的国际化解决方案。 **实验步骤**: 1. **熟悉本地编码类别**: - 了解不同的字符集和编码方式,如UTF-8、GBK等。 - 掌握如何在Struts配置文件中指定字符集。 2. **...
9. **国际化的支持**: Struts2提供了内置的国际化支持,允许根据不同的语言和地区显示相应的文本。 10. **异常处理**: Struts2提供了一套完善的异常处理机制,可以在全局范围内统一处理异常,提高代码的健壮性。 ...
### Struts2环境搭建及国际化知识点详解 #### 一、Struts2简介与环境搭建 **1.1 Struts2框架概述** Struts2是由Apache软件基金会提供的一个开源的MVC框架,它继承了Struts1的设计理念,并进行了大量的改进和优化...
它基于Model-View-Controller (MVC)架构模式,提供了强大的控制层解决方案,帮助开发者更有效地管理应用程序的业务逻辑和用户界面。国际化(i18n)是任何大型应用程序不可或缺的一部分,它允许软件根据用户的地区...
本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...