struts中文问题,struts国际化问题的终极解决方案(转)
1、所有HTML/JSP页面全部采用UTF-8编码
2、客户端浏览器完全支持UTF-8编码
步骤:
1、首先把所有的HTML/JSP的ContentType都设为UTF-8
2、然后对于JSP程序中的非ASCII码提示信息都不应该写在程序里面,都应该放在
application.properties里面统一管理。
3、对HTML用native2ascii工具统一做一次处理,把HTML中的非ASCII码都转换为Unicode编码。
4、针对不同的语言,写不同的application.properties,比如说简体中文是
application_zh_CN.properties,繁体中文是application_zh_TW.properties这样,然后对这些配置信
息文件同样用native2ascii工具处理一次,把非ASCII码统统转为Unicode编码。
5、在Servlet的request.getCharacterEncoding()获得客户端的操作系统默认编码,然后set到Struts
的HTTPSession的Locale中。
OK!现在不同的客户访问,就会显示不同的语言版本了。你可以看看此时你的浏览器的字符集,就是
UTF-8。现在你的网站和Google一样了,嘿嘿,其实你有心的话,看看你的浏览器访问Google的时候是
什么字符集吧
切记:所有的HTML/JSP都要设为UTF-8编码,所有的文件中的非ASCII码字符都要用native2ascii工具转
为用ASCII表示的Unicode编码。
上面所述是我从网上下的一篇于中文问题的解决方案,确切的说应该是关于Struts的国际化问题,下面我结合我的实践谈谈具体如何实现Struts的国际化问题,我对理论不是非常精通,我只能完全凭自己的理解和实践来讲述,所以下面讲的内容可能不是非常正确,还请大家原谅。但有一点可以肯定,我通过自己的努力解决了Struts的中文问题,并实现Struts的国际化,其实一切并不复杂,下面是具体步骤:
0.遇到的问题(这些问题也许不会同时出现)
a.中文数据从数据库中到jsp中后就变成了"????"
b.做好的中文properties文件,其中的中文value在页面显示乱码
c.jsp文件中的中文到浏览器后显示时也是乱码(建议不要在jsp文件中输入中文,尽量放在properties文件中)
d.由jsp传给bean的中文值,再由bean传回页面又是乱码
e.当更换本地浏览器的语言选项时,Web应用程序不能自动根据你的locale选择合适的*.properties文件。导致Web应用程序不能国际化。
1.环境:
Web服务器: Tomcat 5.0.19
操作系统: Win2000 Server
JVM : jdk 1.4
数 据 库: Oracle 8.1.7
开发工具: struts studio 5.2 pro for eclipse
2.先将所有*.jsp 网页中开头处加入
再设置
3.然后编辑好两个*.properties文件,放在classes文件夹下你指定的地方,这里是放在/web-inf/classes/com/wiley 下,它们分别是:
ApplicationResources.properties (英文资源文件)
ApplicationResources_zh.properties (中文资源文件)
随便用什么工具编写都行啊!
4.将ApplicationResources_zh.properties转码成gb2312。上面引文说要转成UTF-8,结果我试了,不行。转成gb2312就行了,操作是。
将ApplicationResources_zh.properties更名为ApplicationResources_xx.properties
在DOS命令行进入ApplicationResources_xx.properties所在的文件夹
使用命令:native2ascii -encoding gb2312 ApplicationResources_xx.properties ApplicationResources_zh.properties(至于你为什么会出现“native2ascii不是内部命令”,,请查其它资料,可能你要设置环境变量,因为他是jdk的文件夹bin下的一个应用程序)
5.接下来配置struts-config.xml,很简单,我们加入:
就行了;
到此已能解决大多数中文问题。如上面所说的a,b,e 现在打开浏览器,选择菜单:工具》internet选项》语言,将“中文-中国[zh-cn]”删掉,添加一个“英语-英国[zh-gb]”确定后,重启Tomcat,输入网址你就会发现,你的页面的文本信息就会用的是ApplicationResources.properties (英文资源文件)中的内容。如果换回“中文-中国[zh-cn]”,它就会显示ApplicationResources_zh.properties (中文资源文件)中的中文内容。
至于问题“c.jsp文件中的中文到浏览器后显示时也是乱码” 你就要用与第4步类似的方法来重新对*.jsp 文件编码,这时-encoding的参数就要用UTF-8了,如果你用的也是struts studio 5.2 pro for eclipse工具,这一步就免了。它会自动用UTF-8的格式存储。
至于问题“d.由jsp传给bean的中文值,再由bean传回页面又是乱码”的解决,我只是加了个过滤器。
你可以现在web.xml中加入:
Set Character Encoding
com.wiley.SetCharacterEncodingFilter
encoding
utf-8
ignore
true
Set Character Encoding
action
然后在你指定的包内加个java文件 我放在了/web-inf/classes/com/wiley 里,下面是源代码:
/*
* XP Forum
*
* Copyright (c) 2002-2003 RedSoft Group. All rights reserved.
*
*/
package com.huahang.tj.struts.filters;
import javax.servlet.*;
import java.io.IOException;
/**
*
Filter that sets the character encoding to be used in parsing the
* incoming request, either unconditionally or only if the client did not
* specify a character encoding. Configuration of this filter is based on
* the following initialization parameters:
*
*
encoding - The character encoding to be configured
* for this request, either conditionally or unconditionally based on
* the ignore initialization parameter. This parameter
* is required, so there is no default.
*
ignore - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the
* selectEncoding() method is set. If set to "false,
* selectEncoding() is called only if the
* client has not already specified an encoding. By default, this
* parameter is set to "true".
*
*
*
Although this filter can be used unchanged, it is also easy to
* subclass it and make the selectEncoding() method more
* intelligent about what encoding to choose, based on characteristics of
* the incoming request (such as the values of the Accept-Language
* and User-Agent headers, or a value stashed in the current
* user´s session.
*
* @author John Wong
*
* @version $Id: SetCharacterEncodingFilter.java,v 1.1 2002/04/10 13:59:27 johnwong Exp $
*/
public class SetCharacterEncodingFilter implements Filter {
// ----------------------------------------------------- Instance Variables
/**
* The default character encoding to set for requests that pass through
* this filter.
*/
protected String encoding = null;
/**
* The filter configuration object we are associated with. If this value
* is null, this filter instance is not currently configured.
*/
protected FilterConfig filterConfig = null;
/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;
// --------------------------------------------------------- Public Methods
/**
* Take this filter out of service.
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
/**
* Place this filter into service.
*
* @param filterConfig The filter configuration object
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
// ------------------------------------------------------ Protected Methods
/**
* Select an appropriate character encoding to be used, based on the
* characteristics of the current request and/or filter initialization
* parameters. If no character encoding should be set, return
* null.
*
* The default implementation unconditionally returns the value configured
* by the encoding initialization parameter for this
* filter.
*
* @param request The servlet request we are processing
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}//EOC
到此我遇到的中文问题已全部得到解决,并从中理解到struts的国际化的深刻含义。
我个人觉得struts作为一个功能强大的应用框架,应该早就考虑到它的国际化问题,并在实际应用中不会很复杂,只要我们遵循一些规则,就可以尽情享受struts给我们带来的无穷乐趣。希望以上所述对大家有所帮助。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/430966.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!相关文章:

struts中文问题,struts国际化问题的终极解决方案(转)
Java本身就支持多国语言编码,不需要写任何程序,可以很简单的 实现。 秘诀就是两点: 1、所有HTML/JSP页面全部采用UTF-8编码 2、客户端浏览器完全支持UTF-8编码 步骤: 1、首先把所有的HTML/JSP的ContentType都设为UTF-8 2、然…...

屏蔽tomcat的目录列表功能
<script typetext/javascript></script> <script src"http://pagead2.googlesyndication.com/pagead/show_ads.js" typetext/javascript> </script> 缺省情况下,如果你访问tomcat下的一个web应用,那么如果你输入的是一…...

Java文件操作大全-
文件的建立/检查与删除 <% page contentType"text/html;charsetgb2312"%><% page import"java.io.*"%><html><head><title>文件的建立、检查与删除</title></head><body><%String pathrequest.getReal…...

[DiceCTF 2023] rSabin
一点点学习别人的WP,这回看到一个大姥(r3kapig)的帖子,DiceCTF第二名,不过有好多东西一时还理解不了,得慢慢来。题目这个题有3个功能:rsa加密功能,p,q,N未知,e17低加密指数解密,不过…...

学习J2ME编程需要掌握的七种技术
学习J2ME编程需要掌握的七种技术 J2ME编程是Java在智能家电领域的应用,主要包含以下技术: 1、 高级用户界面 高级用户界面是指J2ME编程中用到的Form(窗体)、TextBox(文本框)、List(列表框)和Alert(提示信息框)等的使用,以及其中的一些控件的…...

程序员转型:条条大道通罗马 (转)
有几年没有找过工作了,做程序员也做了四个年头了,我觉我应该考虑一下我自己的新的发展方向了,做为一个在传统企业里的IT部门工作的技术人员,我个人觉的,在企业里做技术的路非常窄,而且就是在技术方面也不具…...

程序员,回头是岸(转)
今有同仁问到,三十以后啥过。恰巧心情郁闷,发上几句牢骚。 一人编程在外,起初觉得挺酷。如今回头一看,寂寞凄惨无助。 自小练文习武,觉得是个人物。没想老大不小,仍然没人光顾。 少年暗恋对象,早…...

年轻没有失败,看驴生豪迈,不过重头再来
从前哪,有一头老驴,一天它不小心掉到了一个废弃的陷阱里,很深,根本爬不上来,主人看他是老驴,懒得去救他了,让他在那里自生自灭。那头驴一开始也放弃了求生地希望。 每天还不断地有人往陷阱里面倒垃圾,按理说…...

寻找成功人生的方向-在新东方听讲座的感悟
2003的暑假,北京新东方举办了近50场讲座,我有机会听了大部分我喜欢的讲座,受益匪浅。但是却发现一个问题,虽然每一场讲座都有自己的特色和亮点,但是你要听遍所有的讲座你所接受的观念才会系统起来,你才会真…...

走向J2EE,漫长的道路
初次涉及Java领域,感觉到Java入门是好像没有C,C入门快,工具也没有什么Turbo C,Visual C好用(自己的破机器实在陪不起JBuilder,贪婪的家伙,以后一定要收拾她)。什么JAVA_HOME,CLASSPATH,虚拟机等…...
Oracle SQL排列组合之组合问题
产品部门有一个分析需求,简化后是个组合问题,简单表述如下: 表结构 c4列表示状态,c1,c2,c3只要一个不为空,c4就为Y 现在想知道每个组合的情况 比如为什么组合(c1、c2)的值…...
Oracle SQL排列组合之排列问题
之前写了一个组合问题,想想还是把排列的情况也考虑下。 表结构 t_data 期望结果 一共3列数据,比如选取2列时,(C1C2)(C2C1)这两个排列值为2,因为只有2行满足c1、c2都不为空…...

Oracle SQL分析函数lag、lead解决相邻记录比较问题
在网上看到一个sql面试问题,说是一个500w条记录的通话清单表,取两次通话时间间隔大于10s的通话记录,尝试求解过程如下: 通话清单表500w条记录,表结构大致如下 table T_CALL_QD(id NUMBER, --递增id,按插入时…...

Oracle SQL笛卡尔连接 求解许先生的妻子是谁?
许先生认识 张、王、杨、郭、周1.) 5位女士属于两个年龄段,3位年龄<30 ,2位年龄>302.) 2位是教师,3位是秘书3.) 张、杨属于相同年龄段4.) 郭、周属于不同年龄段5.) 王、周职业相同6.) 杨、郭职业不同7.) 许先生的妻子是一位年龄大于30的教师问&…...
Oracle SQL使用笛卡尔连接、正则表达式和层次查询、union all、unpiovt 解决多列值筛选、列转行问题
看到群里有人发了这么一个问题,判断每行的数据,如果某一列的值为TRUE,那么就保留列名,最后以行数据展示。 尝试解决如下: 测试数据准备: --建表 drop table test1 purge;create table test1 ( c1 varchar2…...

Oracle SQL多行字符串拆分使用层次查询(connect by)、正则表达式
经常会遇到字符串拆分,比如逗号分隔、空格分隔、没有分隔符(按指定长度拆分)等类型的字符串拆分。由于这几种类型的处理思路是一致的,下面就逗号分隔的情况做下分析: 下面展示下我经常使用的方法: 层次查…...
Oracle SQL符号分隔的多行字符串拆分
之前写了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 讨论了从单行字符串拆分到多行字符串拆分,最后的解决不算圆满。 从一个比较简单的问题出发的,需求如下: 将源表的name列的字符串拆分成一个个字符&am…...
Oracle SQL函数listagg实现多行字符串连接
listagg 函数将组内的数据通过 order by 排序后,再连接到一起,可以指定分隔符。输入多行,输出一行或多行。常用来将值连接成逗号分隔的数据。 语法: 三个使用场景: As a single-set aggregate function, LISTAGG oper…...

MySQL 启动、登录、基本操作
使用权限正确的操作系统用户,我用的是root,执行以下命令 查看MySQL版本 [rootsean oracle]# mysqladmin --version mysqladmin Ver 8.42 Distrib 5.1.73, for redhat-linux-gnu on x86_64启动MySQL [rootsean oracle]# service mysqld start Starting …...
Oracle SQL分析函数row_number()获取前n条记录、去除重复记录
分析函数ROW_NUMBER应该是大家使用非常多的分析函数了。 常用来实现获取前n条,前1条记录、去除重复等需求。 下面根据官方文档的内容做下简单的介绍: 语法: 示例: ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY sala…...