隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          相信很多朋友在使用JSP/Servlet等技術進行頁面編程的時候都會或多或少地遇到亂碼問題。解決的方法有很多,比較常見的是手動對所有可能包含中文的字符串進行轉碼:

          String latin = ;
          String gbk 
          = new String(latin.getBytes("iso-8859-1"),"gbk");

          這個方法過去我也比較常用,的確有效,但很累贅耶,絲毫沒有模式之美,有沒有更優雅的方法呢?如果你和我一樣有疑慮的話,可以考慮使用FilterServlet:

           1import java.io.*;
           2import javax.servlet.*;
           3import javax.servlet.http.*;
           4
           5import org.apache.log4j.*;
           6
           7public class CharsetFilter
           8    extends HttpServlet implements Filter{
           9  private static Logger logger = Logger.getLogger("Filter servlet");
          10
          11  public void init(FilterConfig filterConfig)
          12      throws ServletException{
          13  }

          14
          15  public void doFilter(ServletRequest request,ServletResponse response,
          16      FilterChain filterChain){
          17    if(request != null){
          18      String charset = request.getCharacterEncoding();
          19      if(charset == null || !charset.equalsIgnoreCase("gbk"))
          20        try{
          21          request.setCharacterEncoding("GBK");
          22        }

          23        catch(UnsupportedEncodingException ex){
          24          logger.warn(ex.getMessage());
          25        }

          26    }

          27    try{
          28      filterChain.doFilter(request,response); // 遞交責任鏈下一環
          29    }

          30    catch(Exception ex){
          31      logger.error(ex.getMessage());
          32    }

          33  }

          34
          35  public void destroy(){
          36  }

          37}

          38

          FilterServlet內部應該使用責任鏈(Chain of Responsibility)實現,在這里我們把對字符串的轉碼做為責任鏈中的一環,從上一環拿到request,處理后交給鏈的下一環。另外需要在web.xml里做些配置:

          <filter>
            
          <filter-name>charsetfilter</filter-name>
            
          <filter-class>pqp.servlet.CharsetFilter</filter-class>
          </filter>
          <filter-mapping>
            
          <filter-name>charsetfilter</filter-name>
            
          <url-pattern>/*</url-pattern>
            
          <dispatcher>REQUEST</dispatcher>
          </filter-mapping>

          其中“REQUEST”指定了filter攔截的類型,有REQUEST、FORWARD、ERROR和INCLUDE,可組合選擇,一般選REQUEST。全部設置好后重新打包、部署,這樣Servlet就可以自動把所有的request轉換為GBK的字符集了,是不是很方便?但在這里加了filter后對性能方面的影響未知,大家可以討論一下。
          posted on 2007-08-16 14:17 冬天出走的豬 閱讀(231) 評論(0)  編輯  收藏 所屬分類: jsp實例

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 丽水市| 建宁县| 都江堰市| 德庆县| 封丘县| 永德县| 鄂尔多斯市| 盐山县| 广昌县| 石渠县| 肥东县| 广元市| 云龙县| 西吉县| 汪清县| 和龙市| 咸宁市| 永德县| 蕲春县| 金寨县| 陈巴尔虎旗| 固阳县| 崇信县| 礼泉县| 夏邑县| 塔河县| 永胜县| 根河市| 三穗县| 林州市| 天祝| 丹阳市| 板桥市| 玉林市| 虹口区| 瑞昌市| 太康县| 兴安县| 曲靖市| 台北县| 大厂|