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