[JavaWeb] Servlet Filter

作用:

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()

销毁对象时执行

持续更新!!

猜你喜欢

转载自www.cnblogs.com/Yintianhao/p/9649624.html
今日推荐