1. 程式人生 > >[JavaWeb] Servlet Filter

[JavaWeb] Servlet Filter

init size 多個 編寫 頁面 tin web服務 1.0 web項目

作用:

Servlet 過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

可以將一個或多個 Servlet 過濾器附加到一個 Servlet 或一組 Servlet。Servlet 過濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁面。調用 Servlet 前調用所有附加的 Servlet 過濾器。

Servlet 過濾器是可用於 Servlet 編程的 Java 類,可以實現以下目的:

  • 在客戶端的請求訪問後端資源之前,攔截這些請求。
  • 在服務器的響應發送回客戶端之前,處理這些響應

編寫Filter實際上是實現Filter接口,在調用servlet之前會先經過過濾器

步驟:

新建一個Filter類,然後編寫必要的initFilter和doFilter方法

package com.example.filter;

        import javax.servlet.*;
        import javax.servlet.annotation.WebFilter;
        import java.io.IOException;

@WebFilter(filterName = "FirstFilter")
public class FirstFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("doFilter www.baidu.com");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
        //獲得初始化參數
        String siteName = config.getInitParameter("Site");
        System.out.println("initFilter "+siteName);
    }

}

  

之後需要在web.xml裏面進行註冊,配置Filter的名字,所作用的servlet等

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.example.servlet.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/TomcatTest/FirstServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DisplayServlet</servlet-name> <servlet-class>com.example.servlet.DisplayServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayServlet</servlet-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </servlet-mapping> <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.example.filter.FirstFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>www.baidu.com</param-value> </init-param> </filter> <!--配置Filter作用的Servlet--> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </filter-mapping> </web-app>

<url-pattern>標簽裏填的是作用的servlet的名字,Filter會對這個servlet進行處理,如果這個Filter對所有的Servlet作用,則填入/*

一個Javaweb項目中可以有多個Filter,形成一個過濾器鏈,調用他們的順序取決於他們在web.xml中的位置,在前則先調用,在後則後調用

Filter的生命周期:

public void init(FilterConfig config)

Filter對象的創建由Web服務器負責,在Web服務器啟動的時候會創建一個Filter對象,並調用initFilter方法進行初始化,並且整個過程initFilter方法只執行一次,只創建一個Filter對象

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

每次filter進行攔截都會執行

public void destroy()

銷毀對象時執行

持續更新!!

[JavaWeb] Servlet Filter