首先:定義一個類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方法讀
久久不醉