Filter过滤器有五种拦截方式,用注解配置dispatcherTypes属性

REQUEST:默认值,浏览器直接请求的资源会被过滤器拦截

FORWARD:转发访问资源会被过滤器拦截

INCLUDE:包含访问资源

ERROR:错误跳转资源

ASYNC:异步访问资源

如果是web.xml配置,就是配置其<dispatcher></dispatcher>标签

这里用注解着重讲解REQUEST和FORWARD,也是常用的两个,这里我们通过一个Filter类和一个Servlet类进行演示,Filter类控制拦截方式,Servlet控制访问方式,也就是请求转发

package com.zhiying.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)
public class FilterDemo5 implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行了过滤器");chain.doFilter(request,response);}
}
package com.zhiying.servlet;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("/user/a1")
public class ServletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servlet1...");req.getRequestDispatcher("/index.jsp").forward(req,resp); //请求转发的形式访问index.jsp}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

可以看出,直接访问index.jsp是通过了过滤器

从下图可以看出如果我们是通过请求转发的形式访问index.jsp,就不经过过滤器

当然了,我们还可以演示如果是FORWARD:转发访问资源会被过滤器拦截,修改Filter类如下

package com.zhiying.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = DispatcherType.FORWARD)
// @WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)
public class FilterDemo5 implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行了过滤器");chain.doFilter(request,response);}
}

下面可以看出,直接访问是没有经过过滤器的

下面可以看出,通过请求转发经过了过滤器

下面看一下二者的结合体,就是在注解上配置,既可以通过直接访问,也可以通过转发访问,修改Filter类即可

package com.zhiying.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.FORWARD})
// @WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = DispatcherType.FORWARD)
// @WebFilter(urlPatterns = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)
public class FilterDemo5 implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行了过滤器");chain.doFilter(request,response);}
}

Filter过滤器拦截方式相关推荐

  1. Filter_细节_过滤器拦截方式配置

    * 拦截方式配置:资源被访问的方式     * 注解配置:         * 设置dispatcherTypes属性             1. REQUEST:默认值.浏览器直接请求资源    ...

  2. (29) JavaWeb中使用filter过滤器拦截请求、权限检查,过滤响应。

    Filter 过滤器 一.Filter 什么是过滤器 二.Filter 过滤器的使用步骤: 三.Filter 的生命周期 四.FilterConfig 类 五.FilterChain 过滤器链 六.F ...

  3. Filter过滤器拦截路径配置

    在Filter中拦截路径配置有四种形式 具体资源路径拦截:@WebFilter("/index.jsp") //这是指访问index.jsp的时候会经过过滤器 具体目录拦截:@We ...

  4. Filter过滤器注解方式过滤的优先级

    对于一个web工程的filter过滤器,一般有两种方式放入项目中 1.在web.xml里面配置 2.注解 对于第一种,在web.xml里面配置,对于filter的优先级,就很简单,按照配置的顺序来,先 ...

  5. Filter 过滤器拦截路径配置

    具体资源拦截: /index.jsp 只有访问/index.jsp资源时, 过滤器才会被执行 @WebFilter("/index.jsp") public class Filte ...

  6. Filter过滤器讲解

    Filter过滤器 一.Filter什么是过滤器 Filter过滤器它是JavaWeb的三大组件之一,三大组件分别是:Servlet程序.Listener监听器.Filter过滤器 Filter过滤器 ...

  7. Filter过滤器的例子与注解配置

    概念 作用 创建 创建web项目 定义类实现Servlet接口,实现其抽象方法 配置Filter 原理 注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 F ...

  8. 【全面详解】Filter过滤器的使用

    一.什么是过滤器 Filter称之为过滤器,是SerlvetAPI提供的一个Filter接口,A类实现了这个接口,那么A类称之为过滤器Filter.主要用户的请求(HttpServletRequest ...

  9. java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...

    Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...

最新文章

  1. 关于自动化网络监控的真相
  2. C++知识点58——类模板(3、类模板的成员模板)
  3. 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
  4. AJAX与SQL Server(一)
  5. 欧姆龙cp1hum读保护解密步骤_欧姆龙PLC的NJ系列NJ产品功能介绍
  6. spring学习(11):使用配置类
  7. Mendix:云原生应用是软件的未来
  8. 为什么阿里巴巴要求 POJO 中不能使用基本数据类型?
  9. 学python要多久-python入门要学多久
  10. 【渝粤教育】电大中专金融与税收_1作业 题库
  11. 基于Tesseract的OCR识别--身份证
  12. 搜索引擎自动提交连接php文件,死链检测工具(自动提交给百度,逆天了)
  13. java100道逻辑题及答案_100道Java面试题收集整理及参考答案
  14. VMware虚拟机扩展硬盘内存
  15. 8.21: Hackday、慈善x快速迭代
  16. 天才作文-不知道有没有人发过 很有才
  17. Java播放语音包 亲测
  18. 解决报错:The Module Root specified is not a module according to Intellij
  19. php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
  20. 小程序容器技术加持下,企业自主打造小程序生态

热门文章

  1. 【转】Unix系统的心脏-Unix文件系统
  2. Intellij IDEA IDE 运行Sphinx-4 DEMO helloworld出现空...
  3. Kafka 详解(二)------集群搭建
  4. Mac系统使用VS Code编译Bootstrap 4
  5. Building an FTP Test Plan
  6. 【推荐】SQL Server 2008 R2 中英文 开发版/企业版/标准版 下载
  7. [hbase]Hbase 在HDFS上的目录树结构
  8. MySQL之增删改查(以查为主)
  9. Spring MVC JSON数据交互(附带实例)
  10. c语言知5个学生的4门成绩,用C 语言数组解题 :已知5个学生的4门课的成绩,要求求出全部学生的门成绩并分别求出每门课的平均成绩...