第一:Servlet的過濾器的創建和配置,創建一個過濾器對象需要實現javax.servlet.Filter接口,同時實現Filter的3個方法。
第一方法是過濾器中的init()方法用於對過濾器的初始值進行處理,第二個是destory()方法是過濾器的銷毀方法,主要用於釋放資源,對於過濾處理的業務邏輯需要編寫到doFilter()方法中,在請求過濾處理后,需要調用chain參數的doFilter()方法將請求向下傳遞給下一個過濾器或者目標資源。
(過濾器和Servlet十分相似喲,在創建之后同樣需要對其進行配置,過濾器的配置主要分為兩個步驟,分別位聲明過濾器和創建過濾器映射)
第二:過濾器的配置簡單說下,分為兩個步驟,一是聲明過濾器對象,二是創建過濾器映射
<!-- 過濾器聲明 -->
<filter>
<!-- 過濾器的名稱 -->
<filter-name>CountFilter</filter-name>
<!-- 過濾器的完整類名 -->
<filter-class>com.ningmeng.CountFilter</filter-class>
<init-param>
<param-name>count</param-name>
<param-value>5000</param-value>
</init-param>
</filter>
<!-- 過濾器的映射 -->
<filter-mapping>
<!-- 過濾器的名稱 -->
<filter-name>CountFilter</filter-name>
<!-- 過濾器的URL映射 -->
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
------------------------------------------------------------------------------------------------------------------------------
<filter>標簽用於聲明過濾器的對象,在這個標簽中必須配置兩個元素,分別是過濾器的名稱和過濾器的完整類名,其中<filter-name>
為過濾器的名稱,<filter-class>過濾器的完整類名
<filter-mapping>標簽用於創建過濾器的映射,他的主要作用就是指定web應用中,那些URL應用哪一個過濾器進行處理,在<filter-mapping>標簽中需要指定過濾器的名稱和過濾器的URL映射,其中<filter-name>用於定義過濾器的名稱,<url-pattern>用於指定過濾器應用的URL。
注意:</filter-mapping>標簽中的<filter-name>是指定已定義的過濾器的名稱,必須和<filter>標簽中的<filter-name>一一對應
下面演示一下創建一個過濾器,實現網站訪問計數器的功能。並且在web.xml文件的配置中,將網站訪問量的初始值設置為5000.



然后直接上代碼,不廢話
1 package com.ningmeng; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.ServletConfig; 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletRequest; 11 import javax.servlet.ServletResponse; 12 import javax.servlet.annotation.WebServlet; 13 import javax.servlet.http.HttpServlet; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 17 /** 18 * Servlet implementation class CountFilter 19 */ 20 @WebServlet("/CountFilter") 21 public class CountFilter extends HttpServlet implements Filter { 22 private static final long serialVersionUID = 1L; 23 //來訪數量 24 private int count; 25 26 /** 27 * @see Filter#init(FilterConfig) 28 */ 29 public void init(FilterConfig filterConfig) throws javax.servlet.ServletException { 30 // TODO Auto-generated method stub 31 String param=filterConfig.getInitParameter("count");//獲取初始化參數 32 count=Integer.valueOf(param);//將字符串轉換為int 33 } 34 35 /** 36 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 37 */ 38 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { 39 // TODO Auto-generated method stub 40 count++;//訪問數量自增 41 //將ServletRequest轉換成HttpServletRequest 42 HttpServletRequest req=(HttpServletRequest)request; 43 //獲取ServletContext 44 ServletContext context=req.getSession().getServletContext(); 45 context.setAttribute("count", count);//將來訪數量值放入到ServletContext中 46 chain.doFilter(request, response);//向下傳遞過濾器 47 48 } 49 50 51 /** 52 * @see Servlet#destroy() 53 */ 54 public void destroy() { 55 // TODO Auto-generated method stub 56 } 57 58 59 }
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h1>歡迎光臨<br/></h1> 11 <h2>您是本站的第【<%=application.getAttribute("count") %>】位訪客!</h2> 12 </body> 13 </html>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>web02</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <servlet> 13 <servlet-name>FirstServlet</servlet-name> 14 <servlet-class>com.ningmeng.FirstServlet</servlet-class> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>FirstServlet</servlet-name> 18 <url-pattern>/FirsetServlet</url-pattern> 19 </servlet-mapping> 20 21 <!-- 過濾器聲明 --> 22 <filter> 23 <filter-name>CountFilter</filter-name> 24 <filter-class>com.ningmeng.CountFilter</filter-class> 25 <init-param> 26 <param-name>count</param-name> 27 <param-value>5000</param-value> 28 </init-param> 29 </filter> 30 <filter-mapping> 31 <filter-name>CountFilter</filter-name> 32 <url-pattern>/index.jsp</url-pattern> 33 </filter-mapping> 34 </web-app>
運行如下


