竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


175月/080

解决struts国际化和中文问题

发布在 邵珠庆

当今Struts框架的应用已经非常的成熟了,基本的配置我就不多说了,大家上google去搜搜就有一大堆. 最近在一次项目开发中碰到了Struts的I18N问题,我来粗略谈谈基本用法,让大家有对Struts的国际化问题有一个简略的认识.(注意,以下是在struts开发环境配置好了的情况下实现国际化的步骤,顺便解决了中文问题):

1.  设置所有JSP页面的charset为UTF-8.  即在每个JSP页面前加上<%@ page language="Java" contentType="text/html;charset=UTF-8" %>.  java是通过unicode实现国际化的,然而unicode和UTF-8是一一对应的关系.

2.  JSP页面里面没有硬编码的文字(即页面的文字都是从*.properties资源文件里面读出来的,用<bean:message key="keyword in property file">读取即可.) 资源文件的配置也不多说了,在web.xml里面配配就好. 下面假设英文的资源文件叫ApplicationResources_en.properties ,中文的源文件叫ApplicationResources_xx.properties(value都是中文的) . 用JDK自带的native2ascii工具把中文的资源文件里面的中文转化为为用ASCII表示的Unicode编码, 命令如下:  native2ascii -encoding GBK ApplicationResources_xx.properties ApplicationResources_zh.properties . (中文操作系统里面默认是GBK,它是gb2312的扩充集),好了,如果你不用form传中文,不用入库,那么你成功了.打开浏览器在internet选项里面设置一下语言试试. 容易吧,呵呵. 下面的步骤涉及到入库问题.

3.  写一个Filter类,一个最简单的代码例子如下:

import java.io.*;
import javax.servlet.*;

public class CharsetFilter implements Filter{
private FilterConfig config = null;
private String defaultEncode = "UTF-8";

public void init(FilterConfig config) throws ServletException {
this.config = config;
if(config.getInitParameter("Charset")!=null){
defaultEncode=config.getInitParameter("Charset");
}
}

public void destroy() {
this.config = null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
ServletRequest srequest=request;
srequest.setCharacterEncoding(defaultEncode);
chain.doFilter(srequest,response);
}
}

然后你需要在web.xml里面设置一下Filter,加入下面的即可(注意,如果你是在JBX里面开发,声明filter一定要在声明<servlet>前面,否则会报错,但是用的时候好像又没有问题.)

<filter>
<filter-name>Character Encoding</filter-name>
<filter-class>com.alex.util.CharsetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>

4.   接下来是写一个Converter类,在入库前调用encode(),出库的时候调用decode()就ok. 下面是一个简单例子:

public class Converter {
public Converter() {
}

public static String enCode(String str) {
byte temp [];
temp = str.getBytes();
try {
//System.out.println("in before convert: " + str);
str = new String(temp , "ISO-8859-1");
//System.out.println("in after convert: " + str);
}
catch(Exception e) {
System.err.println("convert error: " + e);
}
return str;
}

public static String deCode(String str) {
byte temp [];
try {
//System.out.println("out before convert: " + str);
temp = str.getBytes("ISO-8859-1");
str = new String(temp,"GBK");
//System.out.println("out after convert: " + str);
}
catch(Exception e) {
System.err.println("convert error: " + e);
}
return str;
}
}

5.  应该都OK了吧,我就这样解决了struts的中文问题和国际化问题.

175月/080

资源文件查找顺序

发布在 邵珠庆

资源文件查找顺序

之所以说Struts 2.0的国际化更灵活是因为它可以能根据不同需要配置和获取资源(properties)文件。在Struts 2.0中有下面几种方法:

  1. 使用全局的资源文件,方法如上例所示。这适用于遍布于整个应用程序的国际化字符串,它们在不同的包(package)中被引用,如一些比较共用的出错提示;
  2. 使用包范围内的资源文件。做法是在包的根目录下新建名的package.properties和package_xx_XX.properties文件。这就适用于在包中不同类访问的资源;
  3. 使用Action范围的资源文件。做法为Action的包下新建文件名(除文件扩展名外)与Action类名同样的资源文件。它只能在该Action中访问。如此一来,我们就可以在不同的Action里使用相同的properties名表示不同的值。例如,在ActonOne中title为“动作一”,而同样用title在ActionTwo表示“动作二”,节省一些命名工夫;
  4. 使用<s:i18n>标志访问特定路径的properties文件。使用方法请参考文章《常用的Struts 2.0的标志(Tag)介绍》。在您使用这一方法时,请注意<s:i18n>标志的范围。在<s:i18n name="xxxxx">到</s:i18n>之间,所有的国际化字符串都会在名为xxxxx资源文件查找,如果找不到,Struts 2.0就会输出默认值(国际化字符串的名字)。

上面我列举了四种配置和访问资源的方法,它们的范围分别是从大到小,而Struts 2.0在查找国际化字符串所遵循的是特定的顺序,如图3所示:

图3 资源文件查找顺序图
图3 资源文件查找顺序图

假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:

  1. 查找ChildAction_xx_XX.properties文件或ChildAction.properties;
  2. 查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
  3. 查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
  4. 判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
  5. 查找当前包下的package.properties文件;
  6. 查找当前包的父包,直到最顶层包;
  7. 在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
  8. 查找在struts.properties配置的默认的资源文件,参考例1;
  9. 输出user.title。
115月/080

搜集的趣味短信-你也来乐一乐

发布在 邵珠庆

1、 士兵问连长:作战时踩到地雷咋办?连长大为恼火:*,能咋办?踩坏了照价赔偿。

2、 很久墨收到你的信息 俺很心疼
俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落伞跳过楼
用面条上过吊 可都墨死成
你就请俺吃顿饭 撑死俺算了

3、 如果感到心里挖凉挖凉的,请拨打俺的电话!谈感情请按1,谈工作请按2,谈人生请按3,给俺介绍对象请按5,请俺吃饭请直说,找俺借钱请挂机。

4、 长颈鹿嫁给了猴子,一年后长颈鹿提出离婚:我再也不要过这种上蹿下跳的日子了!猴子大怒:离就离!谁见过亲个嘴还得爬树的!

5、 鱼说:“我时时刻刻把眼睁开是为了在你身边不舍离开。”水说:“我终日流淌不知疲倦是为了围绕你,好好把你抱紧。”锅说:“都他妈快熟了还这么多废话。”

6、 吃饭了吗?请接收短信。大象把大便排在路中央,一只蚂蚁正好路过,它抬头望了望那云雾缭绕的顶峰,不禁唱到:呀啦索,这就是青藏高原!~~~~
7、 你都长大了,有些事应该让你知道了:天,是用来刮风下雨的;地,是用来长花长草的;我,是用来证明人类是多伟大的;你是用来炖粉条的。

8、 在铁路旁大号却没带纸时,别着急,火车会提醒你:裤擦,裤擦,裤裤擦!在河边上大号却没带纸时,别着急,青蛙会告诉你:棍刮,棍刮,棍棍刮!

9、 钱可以买房子但买不到家,能买到婚姻但买不到爱,可以买到钟表但买不到时间,钱不是一切,反而是痛苦的根源,把你的钱给我,让我一个人承担痛苦吧!

10、 老天,太蓝!大海,太咸!人生,太难!工作,太烦!和你,有缘!想你,失眠!见你,太远!唉,这可让我怎么办?想你想得我吃不下筷子,咽不下碗!

11、 送你12生肖,祝你聪明如鼠,强壮如牛,胆大如虎,可爱如兔,自信如龙,魅力如蛇,浪漫如马,温顺如羊,顽皮如猴,美丽如鸡,忠诚如狗,长得像猪!

12、 黑猩猩不小心踩到了长臂猿拉的大便,长臂猿温柔细心地帮其擦洗干净后它们相爱了,别人问起它们是怎么走到一起的?黑猩猩感慨地说:猿粪!都是猿粪啊!

13、 狮子和熊分别在树旁大便,一个月后,狮子发现自己大便旁的树木比熊的那棵长得粗壮,于是说了一句饱含沧桑的哲理——狮 屎 胜 于 熊 便!

14、 心里想一个数字,用它加上52.8,再乘以5,然后减区3.9343,再除以0.5,最后再减去心里想的那个数的十倍,答案很浪漫哦!

15、 你在办公室里老放响屁,同事忍不住说你能不能不出声。然后便见你坐在那里摇来晃去抖个不停,问你在干什么,你回答说我调成震动的了!

16、 亲爱的上帝,请保佑那些不打电话给我,也不传短信给我,更没有想念我的朋友们:愿主把他们的手机掉到厕所里去吧,阿门!

17、 传说你可狠了,在戏院里横躺着占四个座位,别人叫你起来,你却只哼哼两声不动地方,保安来了说:朋友够狠,哪条道上的?你咬牙说:楼上过道摔下来的!

18、 思你念你想着你,找个画家画下你,把你贴在杯子里,整天喝水望着你——幸福吗?倒杯开水烫死你!

19、 尊敬的用户,此时我们已从您的话费中扣除20元献给巴勒斯坦民族解放事业,为此巴自治政府决定以全体阿拉伯世界的名义授予您崇高的称号:本.沙勒巴基!

20、 学问之美,在于使人一头雾水;诗歌之美,在于煽动男女出轨;女人之美,在于蠢得无怨无悔;男人之美,在于说谎说得白日见鬼。

21、 在乎你的我只在乎我在乎的是是否在乎在乎你的我,我在乎的你是否和在乎你的我在乎我在乎的你一样在乎在乎你的我,小样儿,看晕你!

22、 听说过吗?前世的五百次回眸,才换得今生的一次擦肩,象你我这样亲密的朋友,上辈子似乎没干什么,光他妈回头了!

23、 有两个造假钞的不小心造出面值15元的假钞,两人决定拿到偏远山区花掉,当他们拿一张15元买了1元的糖葫芦好,他们哭了,农民找了他们两张7块的

24、 你的人生写照:十岁学会自己洗澡——猪自清;二十岁光彩照人——猪时茂;三十岁找到工作——猪立业;四十岁雇了佣人——猪得佣;五十岁学会打篮球——猪投!

25、 一个三岁小男孩拉着一个三岁小女孩的手说:“我爱你。”小女孩说:“你能为我的未来负责吗?”小男孩说:“当然能,我们都不是一两岁的人了!”

26、刚才和朋友聊天,其中有谈到你,知道吗?我和他们吵了起来,还差点动手打起来,因为他们有的说你像猴子,有的说你像猩猩,实在太过分了!根本没有把你当猪看!

27、有一天,我对你说你是猪,你说:我是猪才怪。于是我便开始叫你猪才怪。终于有一天你忍不住在众人面前大声宣布:我不是猪才怪!

28、伊拉克战争期间最流行的三个词:和平peace,战争war.发现found,把这三个英文单词连起来大声读三遍,你会揭开一个重大历史谜团.

29、人
会谈恋爱,
不特殊;

会吃青草,
不特殊;

会按电话,
才特殊;
还按!
真是神猪!
哇噻!还会笑!
真是酷呆了的猪!

30、有两句话一直很想对你说,今天终于提起勇气:第一句,我爱你我好喜欢你;第二句,千万不要把第一句当真

31、心理测验:
自我觉得智商挺高的往下按
觉得自己还挺幽默的往下按
觉得自己还挺有魅力的往下按
觉得自己还相貌挺帅的往下按
测验结果:
挺不要脸的

32、在你的眉宇间我看到沧桑,在你的眼中我看到自信,在你的额头我看到岁月,在你的唇齿间我看到韭菜,快去刷牙!

33、吃屎、簟璁、醭歙、艽绱、癀穑、魍旃、偬彘、硪钚、鲥硐、上面的词你认识几个,是不是发现自己除了吃屎就什么也不会了呢?

34、两头牛在吃草。其中一头说;“最近流行疯牛病,我们不会被传染上吧?”另一头说;“不会,我们是袋鼠啊。”已经疯了!

35、我一直是江湖中不知名的侠客,直到有一天遇到了传说中最神秘的你,竟然叫出了你的名字,从此,我在江湖上也有了响当当的名号:知猪狭!

36、征婚:家穷人丑一米四九
小学文化农村户口
破屋三间薄田一亩
冷锅热灶老婆没有,
一年四季药不离口
今日短信广征女友
革命道路并肩携手
愿否?

37、医生:“怎么找不到我的笔了呢?我想给你开药方.”病人小声地提醒到:“医生,您不是把它放在我的胳肢窝里了吗?”

38、我想让阳光温暖你,用星光装点你,用美酒陶醉你,用美食物满足你,用烟花灿烂你,用幸福淹没你,可是我不做上帝已经很久了,只能用短信祝福你:天天快乐!

39、如果全世界的猪都死光了?(打一首歌)答案:至少还有你

40、
前清时期坐过堂,
北洋军中扛过枪,
武昌城里落过荒,
北伐战争帮过忙,
南昌外围受过伤,
万里长征翻过墙,
敌后抗战偷过羊,
还有谁能比我强?

41、
军阀混战称过王,
决战平津扒过房,
横渡长江喝过汤,
鸭绿江边喂过狼,
炮击金门擦过膛,
自卫还击骂过娘,
改革开放扫过黄,
还有谁能比我狂?

42、一学生“你把我的衬衫拿到哪里去了?”同屋的人“送洗衣房了”“我的天哪,我把历史课的全要点都记在了袖口了。”

43、一个神经病躺在床上唱歌,唱着唱着,翻了个身继续唱,医生问他:你唱就唱吧,翻身干吗呀?神经病说:傻瓜,A面唱完当然唱B面!

44、
nHZ !HS OM
就知道你猜不到,
看不懂,
你再仔细看看啊!
还看不出来?
你懂拼音吗?
你笨也得有个限度吧?
把手机倒过来看!

45、父亲:“你怎么这么笨,真是个小猪猡!咳!你知道小猪猡是什么吗?”儿子:“知道,它是猪的儿子。”

46、姑娘:我总觉得你的性格跟我小时候一模一样。情郎:是吗,我们两人真是有缘。姑娘:小时候我很喜欢撒谎。情郎:…

47、一醉汉不慎从三楼掉下,引来路人围观,一警察过来:发生什么事?醉汉:不清楚,我也是刚到.

48、一男要跳楼,其妻大喊道:亲爱的别冲动,我们的路还长着呢!男子听后,嗖地跳了下去。警察说:你真不该这样威胁他!