StevenBot-Saltsam

          眼睛能裝下世界,為何卻裝不下眼淚? 一只風箏一輩子只為一根線冒險。 那不是一場游戲,為何總有一根線牽著心懷,隱隱作疼? 那不是一段邂逅,為何飄在橋上的影子,總纏進夢鄉? 那不是一個夢境,為何你的溫柔私語,總是不經意的響起?

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          datas link

          OSChinal Sources codes Library

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

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

           由于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設定的值來編碼

          posted on 2011-10-07 18:06 Steven_bot 閱讀(1233) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 木兰县| 和林格尔县| 延川县| 武平县| 林西县| 政和县| 德保县| 香格里拉县| 南漳县| 蓬安县| 宁乡县| 本溪市| 昌图县| 光泽县| 泰宁县| 万山特区| 都匀市| 名山县| 德保县| 龙井市| 柘城县| 获嘉县| 萝北县| 张掖市| 广安市| 多伦县| 施甸县| 永和县| 双桥区| 海兴县| 长葛市| 建水县| 怀仁县| 海伦市| 新乡县| 石首市| 长武县| 若羌县| 桃园市| 巴马| 武山县|