Struts1.2里提交中文表單到ActionForm后的亂碼問題

          Posted on 2008-11-22 22:35 sk 閱讀(2440) 評論(2)  編輯  收藏 所屬分類: Struts1.2

              由于Struts框架直接把表單數據發送給了ActionForm,所以這里面沒有對HttpRequestServlet進行SetCharacterEncoding,所以默認是按照ISO-8859-1(參見Tomcat 源代碼中的org.apache.catalina.connector.HttpRequestBase中的protected void parseParameters()方法),

              解決的方法,就是在表單提交到ActionForm之前對request進行編碼。
          第一種方法,就是寫一個過濾器,對所有請求進行過濾

          過濾器代碼:

          package com.first.struts.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;

          public class SetCharacterEncodingFilter implements Filter {
           
           
          private String encoding;
           
          private FilterConfig filterConfig = null;
           
           
          public void destroy() {
            
          this.encoding = null;
            
          this.filterConfig = null;

           }


           
          public void doFilter(ServletRequest request, ServletResponse response,
             FilterChain chain) 
          throws IOException, ServletException {
            request.setCharacterEncoding(
          this.encoding);
            chain.doFilter(request, response);
           }


           
          public void init(FilterConfig filterConfig) throws ServletException {
            
          this.encoding = filterConfig.getInitParameter("encoding");
           }


          }



          配置文件web.xml

            <filter>
            
          <filter-name>Set Character Encoding</filter-name>
            
          <filter-class>com.first.struts.filters.SetCharacterEncodingFilter</filter-class>
            
          <init-param>
             
          <param-name>encoding</param-name>
             
          <param-value>GBK</param-value>
            
          </init-param>
           
          </filter>

           
          <filter-mapping>
            
          <filter-name>Set Character Encoding</filter-name>
            
          <url-pattern>/*</url-pattern>
           
          </filter-mapping>
            
          </filter-mapping>




          第二種方法是替換默認的控制器org.apache.struts.action.ActionServlet
          子類代碼:
          import java.io.IOException;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import org.apache.struts.action.ActionServlet;

          public class SetEncodingActionServlet extends ActionServlet {
           
          protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            
          // TODO Auto-generated method stub
            String encoding = getInitParameter("encoding");
            request.setCharacterEncoding(encoding);
            
          super.process(request, response);
           }

          }



          配置文件web.xml
          <servlet>
              
          <servlet-name>testAction</servlet-name>
              
          <servlet-class>jp.co.ricoh.gtis.others.profile.controllers.SetEncodingActionServlet</servlet-class>
              
          <init-param>
                
          <param-name>config</param-name>
                
          <param-value>/WEB-INF/struts-config.xml</param-value>
              
          </init-param>
              
          <init-param>
                
          <param-name>encoding</param-name>
                
          <param-value>Shift_JIS</param-value>
              
          </init-param>
              
          <load-on-startup>2</load-on-startup>
            
          </servlet>

            
          <servlet-mapping>
              
          <servlet-name>testAction</servlet-name>
              
          <url-pattern>*.testdo</url-pattern>
            
          </servlet-mapping>

          此例,凡是通過*.testdo來請求的數據,都會經過參數encoding設定的值來編碼。


          原文鏈接: http://blog.csdn.net/runnerupshi/archive/2006/12/05/1431238.aspx

          Feedback

          # re: Struts1.2里提交中文表單到ActionForm后的亂碼問題  回復  更多評論   

          2009-01-06 15:42 by 冰燁
          按你的方法試了一次,不好用呀

          # re: Struts1.2里提交中文表單到ActionForm后的亂碼問題  回復  更多評論   

          2010-02-02 10:06 by rsnow
          方法好用,編碼問題順利解決,十分感謝

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


          網站導航:
           

          posts - 2, comments - 2, trackbacks - 0, articles - 1

          Copyright © sk

          主站蜘蛛池模板: 仁寿县| 类乌齐县| 文安县| 安康市| 明水县| 甘南县| 梓潼县| 定兴县| 兴义市| 西青区| 宜都市| 湟中县| 响水县| 苏州市| 安多县| 同心县| 乐都县| 托里县| 东城区| 芮城县| 喀喇| 庆安县| 富阳市| 九江市| 延吉市| 朝阳县| 孟村| 中西区| 庐江县| 时尚| 洛扎县| 海丰县| 中阳县| 玉林市| 富阳市| 云阳县| 和硕县| 西平县| 易门县| 泽州县| 桦甸市|