首页 > 其他分享 >Filter(过滤器)

Filter(过滤器)

时间:2022-09-29 17:02:33浏览次数:76  
标签:servlet 接口 Filter jakarta 过滤器 方法

1.过滤器的概念和作用

1.1概念:

  滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求;
在请求到达Servlet/JSP之前,过滤器截获请求;
1.2.作用:在客户端的请求访问后端资源之前,拦截这些请求(添加处理)。

Filter接口

2.1. Filter接口是过滤器类必须实现的接口,该接口中有三个方法:

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,参数FilterConfig可以获得filter的初始化参数;
doFilter(ServletRequest request,ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。

过滤器实现类必须实现该方法,方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁对象前被调用。

2.2.FilterChain接口

 该方法类型作为Filter接口中的doFilter方法的参数使用,FilterChain接口中有一个方法:

doFilter(ServletRequest request,ServletResponse response),该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标资源。

2.3.FilterConfig接口

该接口类型作为Filter接口中的init方法的参数使用,FilterConfig接口中有一个常用方法:

getInitParameter(String name),该方法用来获得过滤器的初始化参数值。

在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的< init-param >类似。

过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。


demo代码:

Filter类;

package com.servlet;


import jakarta.servlet.*;

import java.io.IOException;

public class Filter implements jakarta.servlet.Filter {

@Override
//初始化过滤器,等待过滤对象出现
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("FilterStart");
}
@Override
//使用过滤器
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//设置过滤器做的事情
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("FilterStartBefore");

//让程序向下运行,如果不写,程序到这就会被拦截不走了
filterChain.doFilter(servletRequest,servletResponse);

System.out.println("FilterOverEnd");
}

@Override
//过滤器销毁,web服务器关闭是自动销毁
public void destroy() {
//通知垃圾站回收垃圾
System.gc();
System.out.println("FilterOver");
}
}

Demo类;

package com.show;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class Demo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("管");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">

<servlet>
<servlet-name>Demo</servlet-name>
<servlet-class>com.show.Demo</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Demo</servlet-name>
<url-pattern>/show/demo</url-pattern>
</servlet-mapping>

<filter>
<filter-name>Filter</filter-name>
<filter-class>com.servlet.Filter</filter-class>
</filter>

<filter-mapping>
<filter-name>Filter</filter-name>
<!--设置过滤的请求路径-->
<url-pattern>/show/*</url-pattern>
</filter-mapping>
</web-app>


标签:servlet,接口,Filter,jakarta,过滤器,方法
From: https://www.cnblogs.com/mo-de/p/16742165.html

相关文章

  • 布隆过滤器
     什么是布隆过滤器布隆过滤器(BloomFilter),是1970年,由一个叫布隆的小伙子提出的,距今已经五十年了。它实际上是一个很长的二进制向量和一系列随机映射函数,二进制大家应该......
  • Asp.Net Core 过滤器
    前言    过滤器,从我们开始开发Asp.Net应用程序开始,就一直伴随在我们左右;Asp.NetCore提供多种类型的过滤器,以满足多种多样的业务应用场景;并且在Asp.NetCore本身......
  • (WebFlux)004、WebFilter踩坑记录
    一、背景使用SpringWebFlux的WebFilter时,由于不熟悉或一些思考疏忽,容易出现未知的异常。记录一下排查与解决方案,给大家分享一下。二、问题2.1问题描述在测试接口方法......
  • centos7 中iptables、firewalld 和 netfilter 的关系
    centos7系统使用firewalld服务替代了iptables服务,但是依然可以使用iptables来管理内核的netfilter但其实iptables服务和firewalld服务都不是真正的防火墙,只是用来定......
  • [2core]中间件和过滤器
    概述 最近在尝试做将asp.netwebapi项目转移为asp.netcorewebapi项目的技术试验,今天开始测试认证授权、资源控制、Action与Result控制、以及异常控制的技术变化与请求......
  • filter(滤镜) 属性 设置背景色跟随图片一起变化
    取值  filter:none|blur()|brightness()|contrast()|drop-shadow()|grayscale()|hue-rotate()|invert()|opacity()|saturate()|sepia()|url();......
  • 面试题:海量数据处理利器-布隆过滤器
    目录概念原理布隆过滤器的使用场景简单模拟布隆过滤器Guava布隆过滤器Redis布隆过滤器布谷鸟过滤器作者:小牛呼噜噜|https://xiaoniuhululu.com计算机内功、JAVA底层、......
  • VueJs 自定义过滤器使用总结
    在这个教程中,我们将会通过几个例子,了解和学习VueJs的过滤器。我们参考了一些比较完善的过滤器,比如orderBy和filterBy。而且我们可以链式调用过滤器,一个接一个过滤。因此,我......
  • Stream流中的常用方法_forEach和Stream流中的filter方法
    流模型的操作很丰富,这里介绍一些常用的API。这些方法可以被分成两种:延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为延......
  • MySQL半同步复制的实现和复制过滤器
    异步:当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。同步:当客户端发送请求给服务端,在等待服务端响应的请求时,客户......