大大毛 的笔记

  DDM's Note

哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.

posts - 14, comments - 23, trackbacks - 0, articles - 58
   :: 首页 ::  :: 联系 ::  :: 管理

Struts国际化的快速演示

Posted on 2006-07-24 22:59 大大毛 阅读(439) 评论(0)  编辑  收藏 所属分类: Struts
   前言:
      虽说刚看"精通Struts"几章,已经迫不及待的想试试它的"国际化"效果了.测试环境:JDK1.4 + Tomcat5 + 中文XP

      先用的方法是网络上流行的方法:
      在IE/Internet选项/语言 中删除掉中文,选择英文,如此类推,则可以看到页面的国际化效果.
      但是这种方法有缺点:
         1.很麻烦;
         2.非常的不灵,刚开始俺整了几回都偶尔出效果了,但是玩这招多了,Tomcat5.0.29就再也不理我了,任我怎么变,它依旧显示中文.
      基于第2点那是非解决不可啊

   
分析:
      按"精通Struts"里面对于Struts国际化的解释,应该是页面会从Session(如果有的话)中取出Locale对象,只有当该对象为空时才会将request中的Locale对象放入session中去,而资源文件的选择是依据session中的Locale对象的,如此这般,就可以拿出一个简单点演示国际化效果的方法来:
         提供一个JSP让用户选择语种,如英文,中文.提交到Action时 来个相应处理
         if (action.equalsIgnoreCase( " english " )) {
            request.getSession().setAttribute(Globals.LOCALE_KEY,
new  Locale( " en " , ""
));
        }
        
if (action.equalsIgnoreCase( " chinese "
)) {
            request.getSession().setAttribute(Globals.LOCALE_KEY,
new  Locale( " zh " , " CN "
));
        }
         这样做应该是符合Struts的要求的,结果测试失败.

   
解决办法:
      事实证明,并不是理解Struts有误, 问题只是出在容器的处理方法上,还是按上面的方法,搭配Tomcat5.5测试成功,现在要想看"国际化"的效果就轻松多了,只要在应用的主菜单上加入语言选项,以后的各种跳转都一切OK.

   
还存在的问题:
      经测试证明,这种方法能够达到根据菜单自动切换语种显示的目的,但是也注意到了一点,就是 request.getLocale(); 方法得到的始终都是本机IE的编码,这与session中存放的那个Locale是不一致的,当然也是利用了Struts需要先判断session中的Locale对象是否为空才进行改变这一点.不过这也带来这种演示方法的局限性:
      1.有些Struts应用是允许客户端在应用的过程中改变Locale的,因此为此覆盖了RequestProccessor.proccessLocale()方法,支持动态的更新.这样会造成此种演示方法的可耻失败;
      2.必须依赖于session,
      3.如果程序中存在有手工从资源文件中取资源的情况(如我提到过的标签中的使用),那么
 
   getMessage( (Locale)session.getAttribute(Globals.LOCALE_KEY) , key )
      与
   getMessage( request.getLocale() , key )
      的效果是会完全不同的.

  
 有关Tomcat5.5的一点提示:
      网上有说
Tomcat5.5  是不能与 JDK1.4 搭配使用的,只能用 JDK5 ,这是错误的.
      Tomcat5.5如果搭配 JDK1.4 使用的话,需要注意一点的是:
         1.不能使用那个for windows 的EXE安装文件,需要下载ZIP文件进行安装;
         2.除了必需下载的那个 apache-tomcat-5.5.x.zip 主体文件外,使用 JDK1.4 还必须下载那个 apache-tomcat-5.5.x-compat.zip 文件才行,下载回来后解压到同一个目录中即可直接使用.
         3.手工添加管理员
            向Tomcat\conf\tomcat-users.xml中加入
               <role rolename="admin" />
               <role rolename="manager" />
               <user username="admin" password="你的密码" roles="admin,manager" />

      另外Tomcat5.5与Tomcat5.0还有一个显著的区别就是在数据源的使用上
         Tomcat5.0是用的DBCP数据源的,因此common/lib下有DBCP需要用到的包;
         而Tomcat5.5则不同,如果想要使用DBCP数据源的话,需要手工向common/lib下加下DBCP所需的包:
            commons-dbcp-1.2.1.jar;
            commons-collections-3.1.jar;
            commons-pool-1.2.jar;

只有注册用户登录后才能发表评论。


网站导航:
 

i am ddm