我要啦免费统计

          微藍領域

          我的學習檔案館
          posts - 19, comments - 57, trackbacks - 0, articles - 57
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

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

          公告

             如果大家在閱讀的過程中有什么問題,可以留言或發EMAIL給我. 我一定會回復并盡力給予答復.這也是相互促進的過程.. 有JAVA或J2EE方面的問題,也可以交流一下

          隨筆分類(15)

          搜索

          •  

          積分與排名

          • 積分 - 161712
          • 排名 - 370

          最新評論

          關于Struts里提交中文表單到ActionForm后的亂碼問題

          Posted on 2007-08-26 12:33 hilor 閱讀(356) 評論(0)  編輯  收藏 所屬分類: Struts
          由于Struts框架直接把表單數據發送給了ActionForm,所以這里面沒有對HttpRequestServlet進行SetCharacterEncoding,所以默認是按照ISO-8859-1(參見Tomcat 源代碼中的org.apache.catalina.connector.HttpRequestBase中的protected void parseParameters()方法),

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


          過濾器代碼:
          package jp.co.ricoh.gtis.others.profile.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;
           public void init(FilterConfig filterConfig) throws ServletException {
            // TODO Auto-generated method stub
            this.encoding=filterConfig.getInitParameter("encoding");
           }

           public void doFilter(ServletRequest request, ServletResponse response,
             FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            request.setCharacterEncoding(this.encoding);
            chain.doFilter(request,response);
           }

           public void destroy() {
            // TODO Auto-generated method stub

           }

          }


           

          配置文件web.xml
            <filter>
             <filter-name>SetCharacterEncodingFilter</filter-name>
             <filter-class>jp.co.ricoh.gtis.others.profile.filters.SetCharacterEncodingFilter</filter-class>
             <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
             </init-param>
            </filter>

             <filter-mapping>
             <filter-name>SetCharacterEncodingFilter</filter-name>
             <url-pattern>/*</url-pattern> 
            </filter-mapping>


           

          第二種方法是替換默認的控制器org.apache.struts.action.ActionServlet

           


          子類代碼:
          package jp.co.ricoh.gtis.others.profile.controllers;

           

          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>UTF-8</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設定的值來編碼。

          主站蜘蛛池模板: 成安县| 石屏县| 湖南省| 安徽省| 随州市| 巴彦淖尔市| 德保县| 大邑县| 两当县| 桦川县| 罗田县| 辽阳市| 郧西县| 鹿邑县| 保山市| 类乌齐县| 鄢陵县| 搜索| 永新县| 荣成市| 洱源县| 镇赉县| 大同县| 西青区| 罗江县| 长垣县| 赣榆县| 建宁县| 屏东县| 马边| 阳谷县| 阳新县| 保德县| 乌苏市| 武城县| 乃东县| 洪泽县| 凤阳县| 巧家县| 玉树县| 阆中市|