隨筆-48  評論-26  文章-0  trackbacks-0

           JSP+Servlet之間亂碼的解決僅僅只需一個Filter過濾器即可,為什么在Struts2.x+Hibernate3.0+Spring2.0(以下簡稱S2SH)中亂碼卻解決不了呢?因為在S2SH的整合中,Struts2.x的監聽監管了JSP頁面與Java代碼的咬合,這個監管也包括編碼的處理,所以當我們編寫了認為萬無一失的過濾器之后卻失效的原因,我的解決方案如下,在此拋磚引玉,如果有更好的辦法和建議,望大家提出來。

           

          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 org.apache.struts2.dispatcher.FilterDispatcher;

           

          public class MyFilter extends FilterDispatcher implements Filter {

           

              private FilterConfig config = null;

           

              private String encoding = null;

           

              @Override

              public void init(FilterConfig config) throws ServletException {

           

                 this.config = config;

           

              }

           

              @Override

              public void doFilter(ServletRequest request, ServletResponse response,

                     FilterChain chain) throws IOException, ServletException {

                 if (encoding == null) {

           

                     encoding = config.getInitParameter("encoding");

                 }

                 request.setCharacterEncoding(encoding);

                 chain.doFilter(request, response);

              }

           

              @Override

              public void destroy() {

                 config = null;

                 encoding = null;

              }

           

          }

           

          這個過濾器和平時所編寫不同的是它集成自Struts2.xFilterDispatcher,另外Web.xml的配置如下:

           

          注意此處的順序,自己編寫的過濾器需要配置在首行

          <!-- 解決中文亂碼問題 -->

              <filter>

                 <filter-name>encodeFilter</filter-name>

                 <filter-class>com.custservice.util.MyFilter</filter-class>

                 <init-param>

                     <param-name>encoding</param-name>

                     <param-value>gb2312</param-value>

                 </init-param>

              </filter>

              <filter-mapping>

                 <filter-name>encodeFilter</filter-name>

                 <url-pattern>/*</url-pattern>

              </filter-mapping>

              <filter>

                 <filter-name>myfilter</filter-name>

                 <filter-class>

                     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

                 </filter-class>

              </filter>

              <filter-mapping>

                 <filter-name>myfilter</filter-name>

                 <url-pattern>/*</url-pattern>

              </filter-mapping>

           

              <!-- Struts2的配置 -->

              <filter>

                 <filter-name>struts2.x</filter-name>

                 <filter-class>

                     org.apache.struts2.dispatcher.FilterDispatcher

                 </filter-class>

              </filter>

              <filter-mapping>

                 <filter-name>struts2.x</filter-name>

                 <url-pattern>/*</url-pattern>

              </filter-mapping>

           

          Web.xml配置好后,還需要配置Struts2.x的屬性文件,在Struts2.x的資源文件夾中找到Struts.properties修改如下:

          ### This can be used to set your default locale and encoding scheme

           struts.locale=en_US

          struts.i18n.encoding=iso-8859-1

          改成

           

          ### This can be used to set your default locale and encoding scheme

           struts.locale=zh_US

          struts.i18n.encoding=gb2312
          文章來源:http://www.aygfsteel.com/NicholasEcho/archive/2009/02/06/253648.html
          posted on 2009-02-06 23:40 Worker 閱讀(81) 評論(0)  編輯  收藏 所屬分類: Web

          主站蜘蛛池模板: 乌什县| 中超| 武冈市| 德州市| 蒲城县| 鄂温| 潍坊市| 广昌县| 黑河市| 凭祥市| 琼海市| 建宁县| 乐平市| 临泉县| 嘉禾县| 黎城县| 揭东县| 石城县| 青神县| 开化县| 互助| 宾阳县| 绥阳县| 繁峙县| 柘荣县| 都兰县| 德州市| 孟津县| 普洱| 宿州市| 衡阳市| 昔阳县| 斗六市| 佳木斯市| 马山县| 郎溪县| 祁门县| 旅游| 锡林浩特市| 蒲江县| 泌阳县|