posts - 10, comments - 9, trackbacks - 0, articles - 17

          2種中文亂碼處理--方法和過濾器

          Posted on 2008-12-15 14:46 wesley1987 閱讀(655) 評論(1)  編輯  收藏 所屬分類: struts學習項目
          一. 使用 方法調用處理中文:
              public static String changeStr(String str){    
                  
          if(str==null)return null;
                  String temp
          =null;
                  
          try {
                      temp 
          = new String(str.getBytes("ISO-8859-1"));
                  } 
          catch (UnsupportedEncodingException e) {
                      
                      e.printStackTrace();
                  }
                  
          return temp;
              }

            我們將這個方法作為靜態寫入了BaseAction中,使所有的方法都能調用。
              String offername = changeStr(request.getParameter("offername"));
          這種方法的好處是: 無論是POST/GET的頁面表單,還是重寫的URL他都一并處理了。寫起來也簡單
          可問題是:對于所有頁面參數幾乎都要調用一下這個方法,對于大的工程就很不合適了。
                          特別是參數很多的Form中,所有的參數都要用它處理一次。雖然我把這個處理寫入了驗證中自動調用。
                      但是還是感覺比較麻煩。

           

          二. 使用 過濾器 Filter
          1 新建一個java文件:SetCharacterEncodingFilter


           
          import java.io.IOException;
           
          import javax.servlet.Filter;
          import javax.servlet.FilterChain;
          import javax.servlet.FilterConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;
           
          public class CharacterEncodingFilter implements Filter {
           
              
          private FilterConfig config;
              
          private String encoding;
           
              
          public void destroy() {
                  
          // 銷毀配置
                  this.config = null;
           
              }
           
              
          public void doFilter(ServletRequest request, ServletResponse response,
                      FilterChain chain) 
          throws IOException, ServletException {
                  
          // 如果編碼已經配置, 則使用該編碼.
                  if(this.encoding != null) {
                      request.setCharacterEncoding(
          this.encoding);
                  }
                  
          // 將資源鏈到下一Filter, 如果這是最后一個Filter, 則將資源鏈到目的位置.
                  chain.doFilter(request, response);
           
              }
           
              
          public void init(FilterConfig config) throws ServletException {
                  
          // 方便銷毀配置
                  this.config = config;
                  
          // 讀取web.xml中CharacterEncodingFilter內的初始編碼參數
                  this.encoding = this.config.getInitParameter("encoding");
           
              }

          2 在web.xml中 根節點下加入
          <!-- 設置request編碼方式  -->
             
          <filter>
                  
          <filter-name>Set Character Encoding</filter-name>
                  
          <filter-class>com.neusoft.struts.platform.SetCharacterEncodingFilter</filter-class>
                  
          <init-param>
                      
          <param-name>encoding</param-name>
                      
          <param-value>GB2312</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>ignore</param-name>
                      
          <param-value>true</param-value>
                  
          </init-param>
              
          </filter>
              
          <filter-mapping>
                  
          <filter-name>Set Character Encoding</filter-name>
                  
          <url-pattern>*</url-pattern>
             
          </filter-mapping>

          使用過濾器 可謂是一勞永逸,所有頁面表單是POST的請求,即所有struts中的Form基本都OK了。
          但注意:它也僅對POST請求有效。對于GET請求和重寫URL的請求,它也會去處理,但由于他們和POST的編碼區別,
          過濾器會把他們過濾成??

            解決方法:
          找到Tomcat安裝目錄內conf文件夾下的server.xml文件,
          給其中的連接器元素Connector添加屬性: URIEncoding, 屬性值為: UTF-8.

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

           

          關于亂碼詳細問題即解決,見 亂碼問題詳解

          Feedback

          # re: 2種中文亂碼處理--方法和過濾器  回復  更多評論   

          2009-03-12 17:29 by 打發
          支持下 謝謝,學習了!
          主站蜘蛛池模板: 江山市| 宜宾市| 甘德县| 麦盖提县| 乌兰察布市| 景德镇市| 平原县| 长泰县| 石河子市| 高唐县| 榕江县| 奉化市| 营山县| 白朗县| 齐齐哈尔市| 壶关县| 临沭县| 新津县| 阿坝| 丹东市| 临沂市| 荔波县| 习水县| 贵定县| 海南省| 江门市| 南丹县| 双峰县| 鄱阳县| 上杭县| 和政县| 司法| 康乐县| 天峨县| 和林格尔县| 汉川市| 抚州市| 盐亭县| 丰宁| 岳阳县| 乌兰县|