隨筆 - 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實例

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


          網站導航:
           
          主站蜘蛛池模板: 上杭县| 青田县| 阿巴嘎旗| 茶陵县| 报价| 沧源| 辽中县| 吉木乃县| 孝昌县| 伊宁市| 漠河县| 营山县| 康保县| 华安县| 潜山县| 定远县| 上杭县| 郎溪县| 灯塔市| 竹溪县| 顺昌县| 凉城县| 卓资县| 延边| 宁南县| 宁津县| 内黄县| 三门县| 称多县| 罗源县| 阳城县| 大荔县| 福清市| 湖南省| 民丰县| 西宁市| 阿勒泰市| 左权县| 宜黄县| 五莲县| 清水县|