熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

struts中文問題和國際化問題的終極解決方案

2013-11-23 20:13:52  來源: Java開源技術 

  Java本身就支持多國語言編碼不需要寫任何程序可以很簡單的 實現 秘訣就是兩點
  
  所有HTML/JSP頁面全部采用UTF編碼
  
  客戶端浏覽器完全支持UTF編碼
  
  步驟
  首先把所有的HTML/JSP的ContentType都設為UTF
  
  然後對於JSP程序中的非ASCII碼提示信息都不應該寫在程序裡面都應該放在
  applicationproperties裡面統一管理
  
  對HTML用nativeascii工具統一做一次處理把HTML中的非ASCII碼都轉換為Unicode編碼
  
  針對不同的語言寫不同的applicationproperties比如說簡體中文是
  application_zh_CNproperties繁體中文是application_zh_TWproperties這樣然後對這些配置信
  息文件同樣用nativeascii工具處理一次把非ASCII碼統統轉為Unicode編碼
  
  在Servlet的requestgetCharacterEncoding()獲得客戶端的操作系統默認編碼然後set到Struts
  的HTTPSession的Locale中
  
  OK!現在不同的客戶訪問就會顯示不同的語言版本了你可以看看此時你的浏覽器的字符集就是
  UTF現在你的網站和Google一樣了嘿嘿其實你有心的話看看你的浏覽器訪問Google的時候是
  什麼字符集吧
  
  切記所有的HTML/JSP都要設為UTF編碼所有的文件中的非ASCII碼字符都要用nativeascii工具轉
  為用ASCII表示的Unicode編碼
  
  
  上面所述是我從網上下的一篇於中文問題的解決方案確切的說應該是關於Struts的國際化問題下面我結合我的實踐談談具體如何實現Struts的國際化問題我對理論不是非常精通我只能完全憑自己的理解和實踐來講述所以下面講的內容可能不是非常正確還請大家原諒但有一點可以肯定我通過自己的努力解決了Struts的中文問題並實現Struts的國際化其實一切並不復雜下面是具體步驟
  
  遇到的問題(這些問題也許不會同時出現)
  a中文數據從數據庫中到jsp中後就變成了????
  b做好的中文properties文件其中的中文value在頁面顯示亂碼
  cjsp文件中的中文到浏覽器後顯示時也是亂碼(建議不要在jsp文件中輸入中文盡量放在properties文件中)
  d由jsp傳給bean的中文值再由bean傳回頁面又是亂碼
  e當更換本地浏覽器的語言選項時Web應用程序不能自動根據你的locale選擇合適的*properties文件導致Web應用程序不能國際化
  環境
  Web服務器 Tomcat
  操作系統 Win Server
  JVM jdk
  數 據 庫 Oracle
  開發工具 struts studio pro for eclipse
  先將所有*jsp 網頁中開頭處加入
  
  再設置
  然後編輯好兩個*properties文件放在classes文件夾下你指定的地方這裡是放在/webinf/classes/com/wiley 下它們分別是
  
  ApplicationResourcesproperties (英文資源文件)
  ApplicationResources_zhproperties (中文資源文件)
  隨便用什麼工具編寫都行啊!
  將ApplicationResources_zhproperties轉碼成gb上面引文說要轉成UTF結果我試了不行轉成gb就行了操作是
  將ApplicationResources_zhproperties更名為ApplicationResources_xxproperties
  在DOS命令行進入ApplicationResources_xxproperties所在的文件夾
  使用命令nativeascii encoding gb ApplicationResources_xxproperties ApplicationResources_zhproperties(至於你為什麼會出現nativeascii不是內部命令請查其它資料可能你要設置環境變量因為他是jdk的文件夾bin下的一個應用程序)
  接下來配置strutsconfigxml很簡單我們加入 就行了
  
  到此已能解決大多數中文問題如上面所說的abe 現在打開浏覽器選擇菜單工具》internet選項》語言中文-中國[zhcn]刪掉添加一個英語-英國[zhgb]確定後重啟Tomcat輸入網址你就會發現你的頁面的文本信息就會用的是ApplicationResourcesproperties (英文資源文件)中的內容如果換回中文-中國[zhcn]它就會顯示ApplicationResources_zhproperties (中文資源文件)中的中文內容
  
  至於問題cjsp文件中的中文到浏覽器後顯示時也是亂碼 你就要用與第步類似的方法來重新對*jsp 文件編碼這時encoding的參數就要用UTF如果你用的也是struts studio pro for eclipse工具這一步就免了它會自動用UTF的格式存儲
  至於問題d由jsp傳給bean的中文值再由bean傳回頁面又是亂碼的解決我只是加了個過濾器
  你可以現在webxml中加入
  
  Set Character Encoding
  comwileySetCharacterEncodingFilter
  
  encoding
  utf
  
  ignore
  true
  
  Set Character Encoding
  action
  
  然後在你指定的包內加個java文件 我放在了/webinf/classes/com/wiley 裡下面是源代碼
  /*
  * XP Forum
  *
  * Copyright (c) RedSoft Group All rights reserved
  *
  */
  package comhuahangtjstrutsfilters;
  
  import javaxservlet*;
  import javaioIOException;
  
  /**
  *
  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 AcceptLanguage
  * and UserAgent headers or a value stashed in the current
  * user´s session
  
  *
  * @author John Wong
  *
  * @version $Id: SetCharacterEncodingFilterjavav // :: 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() {
  
  thisencoding = null;
  thisfilterConfig = 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 || (requestgetCharacterEncoding() == null)) {
  String encoding = selectEncoding(request);
  if (encoding != null)
  requestsetCharacterEncoding(encoding);
  }
  
  // Pass control on to the next
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28154.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.