[JavaWeb] Servlet Filter

2021-06-28 08:05

阅读:427

标签:instance   pat   enc   des   获得   vax   项目   get   后端   

作用:

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>FirstServletservlet-name>
        servlet-class>com.example.servlet.FirstServletservlet-class>
    servlet>
    servlet-mapping>
        servlet-name>FirstServletservlet-name>
        url-pattern>/TomcatTest/FirstServleturl-pattern>
    servlet-mapping>

    servlet>
        servlet-name>DisplayServletservlet-name>
        servlet-class>com.example.servlet.DisplayServletservlet-class>
    servlet>
    servlet-mapping>
        servlet-name>DisplayServletservlet-name>
        url-pattern>/TomcatTest/DisplayServleturl-pattern>
    servlet-mapping>

    filter>
        filter-name>FirstFilterfilter-name>
        filter-class>com.example.filter.FirstFilterfilter-class>
        init-param>
            param-name>Siteparam-name>
            param-value>www.baidu.comparam-value>
        init-param>
    filter>
    
    filter-mapping>
        filter-name>FirstFilterfilter-name>
        url-pattern>/TomcatTest/DisplayServleturl-pattern>
    filter-mapping>
web-app>

标签里填的是作用的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

标签:instance   pat   enc   des   获得   vax   项目   get   后端   

原文地址:https://www.cnblogs.com/Yintianhao/p/9649624.html


评论


亲,登录后才可以留言!