過濾器應用

package com.yal.character.Filter; ­

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; ­

/** ­

* @author 張少年

* @date 2008-3-20 ­

* 解決Struts中文顯示亂碼問題 ­

* */ ­

public class SetCharacterEncodingFilter implements Filter { ­

protected String encoding = null; ­

protected FilterConfig filterConfig = null; ­

protected boolean ignore = true; //在web.xml文件裏定義filter時要用到此參數 ­

public void destroy() { ­

   // TODO Auto-generated method stub ­

         this.encoding = null; ­

           this.filterConfig = null; ­

} ­

public void doFilter(ServletRequest request, ServletResponse response, ­

    FilterChain chain) throws IOException, ServletException { ­

   // TODO Auto-generated method stub ­

     // Conditionally select and set the character encoding to be used ­

        if (ignore || (request.getCharacterEncoding() == null)) { ­

            String encoding = selectEncoding(request); ­

            if (encoding != null) ­

                request.setCharacterEncoding(encoding); ­

        } ­

        //Pass control on to the next filter ­

        chain.doFilter(request, response); ­

} ­

public void init(FilterConfig filterConfig) throws ServletException { ­

   // TODO Auto-generated method stub ­

   this.filterConfig = filterConfig; ­

        this.encoding = filterConfig.getInitParameter("encoding"); ­

        String value = filterConfig.getInitParameter("ignore"); ­

        if (value == null) ­

            this.ignore = true; ­

        else if (value.equalsIgnoreCase("true")) ­

            this.ignore = true; ­

        else if (value.equalsIgnoreCase("yes")) ­

            this.ignore = true; ­

        else ­

            this.ignore = false; ­

} ­

    protected String selectEncoding(ServletRequest request) { ­

        return (this.encoding); ­

    } ­

} ­

//class end ­

(注:假如我們是用tomcat作服務器的話,那就更方便了,我們可以直接在tomcat的webapps/jsp-examples/Web-INF/classes/filters目錄中的兩個源文件RequestDumperFilter.java,SetCharacterEncodingFilter.java複製到你使用的包下。) ­

2.寫好這個類以後,我們就在WEB應用的web.xml文件裏定義Filter類,完整web.xml文件如下: ­

<?xml version="1.0" encoding="UTF-8"?> ­

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> ­

<web-app> ­

<!-- 定義Filter,解決struts中文問題 --> ­

<filter> ­

    <filter-name>Set Character Encoding</filter-name> ­

    <filter-class>com.yal.character.Filter.SetCharacterEncodingFilter</filter-class>//包名 ­

    <init-param> ­

   <!-- 定義編碼格式,我用的是GBK --> ­

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

      <param-value>GBK</param-value> ­

    </init-param> ­

    <init-param> ­

    <!-- innore參數是在過濾器類定義的 --> ­

      <param-name>ignore</param-name> ­

      <param-value>true</param-value> ­

    </init-param> ­

</filter> ­

<filter-mapping> ­

    <filter-name>Set Character Encoding</filter-name> ­

    <servlet-name>action</servlet-name> ­

</filter-mapping> ­

<filter-mapping> ­

    <filter-name>Set Character Encoding</filter-name> ­

    <servlet-name>*.jsp</servlet-name> ­

</filter-mapping> ­

<!-- Filter 定義結束 --> ­

<servlet> ­

    <servlet-name>action</servlet-name> ­

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> ­

    <init-param> ­

      <param-name>config</param-name> ­

      <param-value>/WEB-INF/struts-config.xml</param-value> ­

    </init-param> ­

    <init-param> ­

      <param-name>debug</param-name> ­

      <param-value>3</param-value> ­

    </init-param> ­

    <init-param> ­

      <param-name>detail</param-name> ­

      <param-value>3</param-value> ­

    </init-param> ­

    <load-on-startup>0</load-on-startup> ­

</servlet> ­

<servlet-mapping> ­

    <servlet-name>action</servlet-name> ­

    <url-pattern>*.do</url-pattern> ­

</servlet-mapping> ­

<welcome-file-list> ­

    <welcome-file>index.jsp</welcome-file> ­

</welcome-file-list> ­

<taglib> ­

     <taglib-uri>/WEB-INF/jesun.tld</taglib-uri> ­

    <taglib-location>/WEB-INF/jesun.tld</taglib-location> ­

</taglib> ­

</web-app> ­

(3)以後編寫JSP文件時,記得加入下面兩句: ­

<%@page contentType="text/html;charset=GBK"%> ­

<META http-equiv=Content-Type content="text/html;charset=GBK"> ­

   到這裏我們的工作就做完了,在程序裏我們不需要再作任何其它處理,呵呵­

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章