午夜拍鍵驚奇
          子夜 編程 代碼與我同在
          posts - 48,comments - 118,trackbacks - 79
          相信很多朋友在使用JSP/Servlet等技術(shù)進(jìn)行頁(yè)面編程的時(shí)候都會(huì)或多或少地遇到亂碼問題。解決的方法有很多,比較常見的是手動(dòng)對(duì)所有可能包含中文的字符串進(jìn)行轉(zhuǎn)碼:

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

          這個(gè)方法過去我也比較常用,的確有效,但很累贅耶,絲毫沒有模式之美,有沒有更優(yōu)雅的方法呢?如果你和我一樣有疑慮的話,可以考慮使用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); // 遞交責(zé)任鏈下一環(huán)
          29    }

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

          33  }

          34
          35  public void destroy(){
          36  }

          37}

          38

          FilterServlet內(nèi)部應(yīng)該使用責(zé)任鏈(Chain of Responsibility)實(shí)現(xiàn),在這里我們把對(duì)字符串的轉(zhuǎn)碼做為責(zé)任鏈中的一環(huán),從上一環(huán)拿到request,處理后交給鏈的下一環(huán)。另外需要在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。全部設(shè)置好后重新打包、部署,這樣Servlet就可以自動(dòng)把所有的request轉(zhuǎn)換為GBK的字符集了,是不是很方便?但在這里加了filter后對(duì)性能方面的影響未知,大家可以討論一下。
          posted on 2005-11-04 19:42 ^ Mustang ^ 閱讀(1780) 評(píng)論(0)  編輯  收藏 所屬分類: Java 點(diǎn)滴
          主站蜘蛛池模板: 英山县| 米泉市| 宽甸| 河津市| 乡宁县| 曲周县| 东乡族自治县| 平江县| 嵩明县| 霸州市| 沁源县| 博乐市| 蓬溪县| 通化县| 昭苏县| 凤阳县| 武山县| 蓬安县| 哈密市| 封开县| 五寨县| 平湖市| 乌鲁木齐县| 建宁县| 堆龙德庆县| 游戏| 哈尔滨市| 昂仁县| 抚远县| 沾化县| 思茅市| 房产| 吕梁市| 时尚| 涞源县| 通渭县| 新蔡县| 宁津县| 广平县| 旺苍县| 榆社县|