> 文章列表 > 【12 Filter 学习笔记】

【12 Filter 学习笔记】

【12 Filter 学习笔记】

Filter 笔记记录

    • 1. Filter 过滤器
    • 2. Filter介绍
    • 3. FilterChain
    • 3. Filter 过滤器的使用
    • 4. 过滤器使用细节
    • 5. Filter的声明周期
    • 6. FilterConfig
    • 7. 过滤器五种拦截行为

1. Filter 过滤器

【12 Filter 学习笔记】
【12 Filter 学习笔记】

2. Filter介绍

【12 Filter 学习笔记】

3. FilterChain

【12 Filter 学习笔记】
【12 Filter 学习笔记】

3. Filter 过滤器的使用

【12 Filter 学习笔记】


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/demo1")
public class ServletDemo01  extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("demo1 执行了");resp.getWriter().write("demo1执行了");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}
}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/*** Filter基本使用*  @WebFilter("/*") 代表所有都会拦截*/
@WebFilter("/*")
public class FilterDemo01 implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {System.out.println("filter01 执行了");//处理乱码resp.setContentType("text/html;charset=UTF-8");//放行filterChain.doFilter(request,resp);}
}

【12 Filter 学习笔记】

4. 过滤器使用细节

【12 Filter 学习笔记】
在web.xml中配置的话 是从上到下在Filterchain中执行,使用注解可以一一对应

5. Filter的声明周期

服务器加载时就创建了,当应用卸载时和服务器停止时执行销毁
【12 Filter 学习笔记】


import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** Filter 生命周期*/
@WebFilter("/*")
public class FilterDemo03 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("filter 初始化成功");}@Overridepublic void doFilter(ServletRequest request, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {System.out.println("filter03 执行了");//处理乱码resp.setContentType("text/html;charset=UTF-8");//放行filterChain.doFilter(request,resp);}@Overridepublic void destroy() {System.out.println("filter 销毁了");}
}

6. FilterConfig

【12 Filter 学习笔记】
【12 Filter 学习笔记】
【12 Filter 学习笔记】


import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** Filter 过滤器配置对象的使用*/
//@WebFilter("/*")
public class FilterDemo04 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("filter 初始化成功");//获取过滤器名字String filterName = filterConfig.getFilterName();System.out.println(filterName);// 根据名称获取valueString filter = filterConfig.getInitParameter("filter");System.out.println(filter);}@Overridepublic void doFilter(ServletRequest request, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {System.out.println("filter03 执行了");//处理乱码resp.setContentType("text/html;charset=UTF-8");//放行filterChain.doFilter(request,resp);}@Overridepublic void destroy() {System.out.println("filter 销毁了");}
}

7. 过滤器五种拦截行为

【12 Filter 学习笔记】

<?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"><filter><filter-name>filter05</filter-name><filter-class>com.example.Filter.FilterDemo05</filter-class><async-supported>true</async-supported>
<!--        <init-param>-->
<!--            <param-name>filter</param-name>-->
<!--            <param-value>filter param value</param-value>-->
<!--        </init-param>-->
<!--        配置开启异步支持,当dispatcher配置ASYN时,需要配置此行--></filter><filter-mapping><filter-name>filter05</filter-name><url-pattern>/error.jsp</url-pattern>
<!--        过滤请求:默认值--><dispatcher>REQUEST</dispatcher>
<!--        过滤全局错误页面,当由服务器调用全局错误页面时,过滤器工作-->
<!--        不配置全局配置 不会执行 filter05过滤器调用--><dispatcher>ERROR</dispatcher>
<!--        过滤请求转发 当请求转发时 过滤器工作-->
<!--        不配置全局配置 不会执行过滤器--><dispatcher>FORWARD</dispatcher>
<!--        不配置全局 不会执行过滤器-->
<!--        过滤请求包含 当请求包含时,过滤器工作。它只能过滤动态包含,jsp的include指令是静态包含,过滤器不会--><dispatcher>INCLUDE</dispatcher>
<!--        过滤异步类型,它要求我们filter标签中配置开启异步支持--><dispatcher>ASYNC</dispatcher></filter-mapping><!--    配置全局错误页面--><error-page><exception-type>java.lang.Exception</exception-type><location>/error.jsp</location></error-page><error-page><error-code>404</error-code><location>/error.jsp</location></error-page>
</web-app>