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

              解決的方法,就是在表單提交到ActionForm之前對(duì)request進(jìn)行編碼。
          第一種方法,就是寫(xiě)一個(gè)過(guò)濾器,對(duì)所有請(qǐng)求進(jìn)行過(guò)濾

          過(guò)濾器代碼:

          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>




          第二種方法是替換默認(rèn)的控制器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>

          此例,凡是通過(guò)*.testdo來(lái)請(qǐng)求的數(shù)據(jù),都會(huì)經(jīng)過(guò)參數(shù)encoding設(shè)定的值來(lái)編碼。


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

          Feedback

          # re: Struts1.2里提交中文表單到ActionForm后的亂碼問(wèn)題  回復(fù)  更多評(píng)論   

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

          # re: Struts1.2里提交中文表單到ActionForm后的亂碼問(wèn)題  回復(fù)  更多評(píng)論   

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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

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

          Copyright © sk

          主站蜘蛛池模板: 武山县| 白城市| 满城县| 綦江县| 阜宁县| 高阳县| 江孜县| 桐庐县| 乌审旗| 兴海县| 钦州市| 永川市| 沙坪坝区| 米林县| 广南县| 大名县| 滦南县| 会宁县| 深圳市| 昭通市| 吴川市| 昌邑市| 山阴县| 灵丘县| 太白县| 华蓥市| 靖江市| 罗平县| 铁岭市| 汉源县| 高清| 阿图什市| 察雅县| 和林格尔县| 新平| 玉环县| 阳东县| 南充市| 青龙| 视频| 江城|