解決Struts中文亂碼問題總結


在進行struts開發的過程中。總也是出現非常多的亂碼問題。但歸根究竟,也僅僅是下面三種情況: 

㈠頁面顯示中文亂碼 

㈡傳遞參數中文亂碼 

㈢國際化資源文件亂碼
 

以下就這三中情況介紹怎么在詳細項目中處理這些亂碼問題。

而對於總體的處理思想。是要統一編碼為: UTF-8.(以myeclipse6支持的struts1.3為准) 

㈠頁面顯示中文亂碼 

      對於在頁面中顯示出現亂碼,這個問題比較簡單,便是檢查你的JSP文件中是不是出現了中文要處理。由於JSP默認的編碼格式為“ISO-8859-1”。當JSP中出現要處理的中文時。其顯示就出現亂碼了,這樣的情況一般出如今手寫JSP,或改動時。由於在myeclipse6.0中,假設出現了編碼錯誤時,程序不會讓你保存,而是會提示你注意編碼,這點非常好。

詳細的改動辦法是把

Html代碼

  1. <%.@ page language="java" import="java.util." pageEncoding="ISO-8859-1">  


改成:

Html代碼

  1. <%.@ page language="java" import="java.util." pageEncoding="UTF-8">   



㈡傳遞參數中文亂碼 

         傳遞參數出現的亂碼,參數的內容為中文。比方在struts應用中,簡單的一個登錄界面中。須要傳遞的登錄名為中文時,你沒經處理之前,是會出現亂碼傳遞的。為了讓我們能看到顯示的亂碼,我們在相應的Action類的子類里,改動一下。用System.out把接受到的參數輸出,代碼例如以下:

Java代碼

  1. public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,   
  2.         HttpServletResponse response) ...{   
  3.     DynaActionForm loginForm = (DynaActionForm) form;   
  4.   
  5.     String username = (String) loginForm.get("username");   
  6.     String password = (String) loginForm.get("password");   
  7.     System.out.println("username:"+username);   
  8.     System.out.println("password:"+password);   
  9.     if (username.equals("ivorytower") && password.equals("123456")) ...{   
  10.         return mapping.findForward("success");   
  11.     }   
  12.     return mapping.findForward("fail");   
  13.     }  



那么當你提交了中文輸入后就會出現亂碼了。 

詳細的解決方法: 

①改動Tomcat---->conf----->server.xml文件,在改動port的標簽后面加一行代碼。例如以下:

Xml代碼

  1.  port="8080" protocol="HTTP/1.1"    
  2.               connectionTimeout="20000"    
  3.               redirectPort="8443"  URIEncoding="UTF-8"/>  


②編寫過濾器Filter

Java代碼

  1.        
  2. import java.io.IOException;   
  3.   
  4. import javax.servlet.Filter;   
  5. import javax.servlet.FilterChain;   
  6. import javax.servlet.FilterConfig;   
  7. import javax.servlet.ServletException;   
  8. import javax.servlet.ServletRequest;   
  9. import javax.servlet.ServletResponse;   
  10.   
  11. public class CharacterEncodingFilter implements Filter ...{   
  12.   
  13.     @Override  
  14.     public void destroy() ...{   
  15.     }   
  16.   
  17.     @Override  
  18.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException   {   
  19.     request.setCharacterEncoding("utf-8");   
  20.     chain.doFilter(request, response);   
  21.     }   
  22.   
  23.     @Override  
  24.     public void init(FilterConfig arg0) throws ServletException {   
  25.     }   
  26.   
  27. }  



  利用過濾器,把request傳遞的中文參數都設成“UTF-8”編碼。 

③改動web.xml文件 

    打開項目里的web.xml文件,在前面加上例如以下代碼:

Xml代碼

  1.       
  2.   
  3. characterEncoding  
  4. com.v512.example.CharacterEncodingFilter  
  5.   
  6.   
  7. characterEncoding  
  8. /*  
  9.   


注意其過濾的URL為“/*”,表示當前的request請求。

為了使設置生效,重起tomcat。 

㈢國際化資源文件亂碼 

     ①利用JDK的native2ascii工具進行編碼轉換 

國際化問題。主要是為了處理文件在瀏覽器上的顯示問題。還是以登錄界面來說,比方在中文瀏覽器上,我們要看到中文顯示,相應在英文瀏覽器上要顯示英文。那么我們在登錄那個界面處理上,就不能直接寫上我們的“username”“password”等標識了。就要用標記轉換輸出了,改動為:

Html代碼

  1.        
  2.  key="example.login.username"/>  


  再者,打開項目下的資源配置文件ApplicationResources.properties。根據上面所寫key值,設定成我們要的默認值(顯示英文)。比方

引用

      
#Resource for Parameter 'com.v512.example.struts.ApplicationResources 
#Project webexample2 
example.login.username=username 
example.login.password=password


如今我們動手新建一個資源文件,讓其能顯示中文,直接Ctrl+C。Ctrl+V。改名為ApplicationResources_zh.properties,代碼例如以下:

引用

       
#Resource for Parameter 'com.v512.example.struts.ApplicationResources 
#Project webexample2 
example.login.username=用戶名 
example.login.password=密碼


但保存,myeclipse會報錯,這時我們須要改動資源文件的編碼格式。Windons---->Preferences---->Content Type------>Text----->JavaPropertiesFile,把其Default encoding改為“utf-8”,按“update”更新。這樣就能進行保存了。

可是當我們進行驗證會不是成功時,仍然給我們的是亂碼。 

不急。我們還得做一項任務。打開DOS窗體。CMD到資源文件所在文件夾,運用JDK的native2ascii工具把我們新建的資源文件改成還有一個名字的資源文件,比如bank.properties。

命令例如以下:

引用

     
>native2ascii -encoding gbk ApplicationResources_zh.properties bank.properties


打開bank.properties資源文件,自己主動生成的代碼例如以下:

引用

      
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) 

example.login.username = \u7528\u6237\u540D 
example.login.password = \u5BC6\u7801


然后在myeclipse窗體中,把原來新建ApplicationResources_zh.properties 刪除,並把bank.properties改為ApplicationResources_zh.properties (為了方便記憶,管理)。

然后重起tomcat或進行reload文件,我們發現亂碼問題沒有了。 

②利用Eclipse ResourceBundle Editor插件工具 

      以上我們是利用了JDK的native2ascii工具來處理國際化問題,但在EC中,另一種更方便的工具專門用來處理編輯java的資源文件國際化亂碼問題,即Eclipse ResourceBundle Editor插件工具。安裝了這個插件后,我們能進行方便的可視化資源文件編輯。推薦。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM