當在做程序的是你也許會遇到一些很讓你惱火的亂碼問題,就是在你在頁面?zhèn)鲄?shù)或向數(shù)據(jù)庫里插入數(shù)據(jù)或去值的時候會出現(xiàn)亂碼的問題,其實有很多解決辦法比如:添加request.setCharacterEncoding("GB18030");或在取值的時候用String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"gbk");等 但有時仍然會遇到一些問題:下面給大家扔一個用過濾器解決此恩體的例子:
首先:定義一個類CharsetEncodingFilter讓它實現(xiàn)javax.servlet.Filter接

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*; // For Date class

String encoding;
  //定義一個成員變量用于在init()方法里得到配置文件里<init-param>中對應  <paramname>encoding</param-name> 的 <param-value>GB18030</param-value>值;其中GB18030值可以更改比如gbk等;


public class CharsetEncodingFilter  implements javax.servlet.Filter {
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws ServletException, IOException {
          //
1,doFilter方法的第一個參數(shù)為ServletRequest對象。此對象給過濾器提供了對進入的信息(包括表單數(shù)據(jù)、cookie和HTTP請求頭)的完全訪問。第二個參數(shù)為ServletResponse,通常在簡單的過濾器中忽略此參數(shù)。最后一個參數(shù)為FilterChain,此參數(shù)用來調(diào)用servlet或JSP頁。
             
             HttpServletRequest   request =   (HttpServletRequest)request
;//如果處理HTTP請求,并且需要訪問諸如getHeader或getCookies等在ServletRequest中無法得到的方法,就要把此request對象構(gòu)造成HttpServletRequest。
           
            request.setCharacterEncodeing(encoding);
            chain.doFilter(request,response);
                                        
  //2.調(diào)用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個FilterChain對象作為它的一個參數(shù)。在調(diào)用此對象的doFilter方法時,激活下一個相關的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關聯(lián),則servlet或JSP頁面被激活。
}

public void init(FilterConfig config)throws ServletException {

     encoding  = FilterConfig.getInitParameter("encoding
");//FilterConfig對象具有一個getInitParameter方法,它能夠訪問部署描述符件                                                              //(web.xml)中分配的過濾器初始化參數(shù)
}

public void destroy() {}
}


  然后在配置文件web.xml里添加: (請注意,過濾是在serlvet規(guī)范2.3版中初次引入的。因此,web.xml文件必須使用DTD的2.3版本。)

 <filter>

     <filter-name>CharsetEncodingFilter</filter-name>

     <filter-class>com.util.filter.CharsetEncodingFilter</filter-class>//class必須是完整路徑

     <init-param>

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

            <param-value>GB18030</param-value>

     </init-param>

 </filter>

 <filter-mapping>

     <filter-name>CharsetEncodingFilter</filter-name>

     <url-pattern>*.jsp</url-pattern>
</filter-mapping>//表示對所有jsp文件有效

filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六個可能的子元素:
 icon  這是一個可選的元素,它聲明IDE能夠使用的一個圖象文件。
 filter-name  這是一個必需的元素,它給過濾器分配一個選定的名字。
 display-name  這是一個可選的元素,它給出IDE使用的短名稱。
 description  這也是一個可選的元素,它給出IDE的信息,提供文本文檔。
 filter-class  這是一個必需的元素,它指定過濾器實現(xiàn)類的完全限定名。
 init-param  這是一個可選的元素,它定義可利用FilterConfig的getInitParameter方法讀



久久不醉