隨筆-9  評論-1  文章-0  trackbacks-0
          package filters;

          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;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletRequestWrapper;

          public class TomcatFormFilter implements Filter {
              
          /**
               * Request.java 對 HttpServletRequestWrapper 進行擴充, 不影響原來的功能并能提供所 有的
               * HttpServletRequest 接口中的功能. 它可以統一的對 Tomcat 默認設置下的中文問題進行解決而只 需要用新的 Request
               * 對象替換頁面中的 request 對象即可.
               
          */

              
          class Request extends HttpServletRequestWrapper {
                  
          public Request(HttpServletRequest request) {
                      
          super(request);
                  }


                  
          /**
                   * 轉換由表單讀取的數據的內碼. 從 ISO 字符轉到 GBK.
                   
          */

                  
          public String toChi(String input) {
                      
          try {
                          
          byte[] bytes = input.getBytes("ISO8859-1");
                          
          return new String(bytes, "GBK");
                      }
           catch (Exception ex) {
                      }

                      
          return null;
                  }


                  
          /**
                   * Return the HttpServletRequest holded by this object.
                   
          */

                  
          private HttpServletRequest getHttpServletRequest() {
                      
          return (HttpServletRequest) super.getRequest();
                  }


                  
          /**
                   * 讀取參數 -- 修正了中文問題.
                   
          */

                  
          public String getParameter(String name) {
                      
          return toChi(getHttpServletRequest().getParameter(name));
                  }


                  
          /**
                   * 讀取參數列表 - 修正了中文問題.
                   *
          */

                  
          public String[] getParameterValues(String name) {
                      String values[] 
          = getHttpServletRequest().getParameterValues(name);
                      
          if (values != null{
                          
          for (int i = 0; i < values.length; i++{
                              values[i] 
          = toChi(values[i]);
                          }

                      }


                      
          return values;
                  }

              }


              
          public void destroy() {
              }


              
          public void doFilter(ServletRequest request, ServletResponse response,
                      FilterChain chain) 
          throws IOException, ServletException {
                  HttpServletRequest httpreq 
          = (HttpServletRequest) request;
                  
          if (httpreq.getMethod().equals("POST")) {
                      request.setCharacterEncoding(
          "GBK");
                  }
           else {
                      request 
          = new Request(httpreq);
                  }

                  chain.doFilter(request, response);
              }


              
          public void init(FilterConfig filterConfig) throws ServletException {
                  
              }

          }
          posted on 2008-07-03 13:39 QQ小妹 閱讀(242) 評論(0)  編輯  收藏 所屬分類: JAVA
          every day is new day
          主站蜘蛛池模板: 福州市| 小金县| 驻马店市| 赫章县| 海淀区| 施甸县| 灵璧县| 叙永县| 中超| 临西县| 扎鲁特旗| 巴青县| 西城区| 玉龙| 石家庄市| 高平市| 玛曲县| 舟曲县| 衡山县| 慈溪市| 河东区| 安顺市| 海林市| 桃园市| 凌云县| 锡林郭勒盟| 淳化县| 巨野县| 墨玉县| 东至县| 白河县| 青浦区| 台山市| 景洪市| 通化县| 三明市| 桓台县| 株洲县| 上思县| 邻水| 仁布县|