filter的使用
(1)什麽是filter
過濾器是處於客戶端與服務器資源文件之間的一道過濾網,在訪問資源文件之前,通過一系列的過濾器對請求進行修改,判斷等,把不符合規則的請求在中途攔截或者修改。或者對響應進行過濾、攔截或者修改。
xml中的配置:
此處<url—pattern>/*</url-pattern>。則客戶端請求訪問任意資源文件時都要經過過濾器過濾,通過則訪問文件,否則攔截。
當然你可以只作用於某個文件夾下的所有文件::<url—pattern>/dir/*</url-pattern>
作用於某一種類型的文件:<url—pattern>*.擴展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>過濾所有對jsp文件的訪問請求。
作用於某一文件夾下某一類型文件:<url—pattern>/dir/*.擴展名</url-pattern>
跟servlet類似,如果一個過濾器需要過濾多種文件,則可以配置多個<filter-mapping>,一個mapping定義一個url-pattern來定義過濾規則。
詳情參考此圖
重點!!!在web.xml中配置過濾器。這裏要謹記一條原則:在web.xml中,監聽器>過濾器>servlet。也就是說web.xml中監聽器配置在過濾器之前,過濾器配置在servlet之前,否則會出錯。
當未加過濾器時,頁面顯示亂碼
加了過濾器
代碼:
xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>myTest1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>defaultView Code.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>MyServlet1</servlet-name> <servlet-class>cn.swpu.pang.MyServlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet1</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <filter> <filter-name>MyFilter1</filter-name> <filter-class>cn.swpu.pang.MyFilter1</filter-class> </filter> <filter-mapping> <filter-name>MyFilter1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
myFilter1
package cn.swpu.pang; 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 javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class MyFilter1 */ @WebFilter("/MyFilter1") public class MyFilter1 implements Filter { /** * Default constructor. */ public MyFilter1() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("我的filter"); request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }View Code
在中間遇到了一個問題,就是如果,用
HttpServletRequest request=(HttpServletRequest) arg0;//獲取request對象
HttpServletResponse response=(HttpServletResponse) arg1;//獲取response對象
進行類型轉換,在再設置編碼格式時,仍然會顯示亂碼,不知道問題所在
filter的使用