Servlet過濾器,Servlet過濾器創建和配置


第一: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>

 

運行如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM