filter就是一种过滤器,对于我们的请求进行一次过滤,当客户端向服务器发请求的时候,如果在服务端配置了filter过滤器,过滤器可以在请求目标资源之前或者在响应给客户端之前做一些操作
我们来测试下filter
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse)servletResponse;
System.out.println("在请求之前运行");//请求之前做的操作
filterChain.doFilter(httpServletRequest,httpServletResponse);//将请求放行
System.out.println("响应之前运行"); //响应之前的操作
}
}
再部署一下filter的配置
<?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_6_0.xsd"
version="6.0">
<filter>
<filter-name>loggingFilter</filter-name>
<filter-class>com.atguigu.filter.LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loggingFilter</filter-name>
<servlet-name>servletA</servlet-name> //请求资源的别名
</filter-mapping>
</web-app>
我们部署了一个filter过滤器,然后再将建立一个servlet对象
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(
urlPatterns = "/servletA",
name = "servletA"
)
public class ServletA extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("请求成功");
resp.setCharacterEncoding("GBK");
// resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("响应成功");
}
}
测试结果
测试成功