当前位置: 首页 > article >正文

Filter过滤器的使用

目录

什么是过滤器

使用过滤器

实现接口

配置拦截的url

在xml中进行配置

注解配置

过滤器的执行顺序 

xml配置的执行顺序

注解配置的执行顺序

四种拦截方式

实现错误页面


什么是过滤器

    Filter过滤器是一种部署在Web服务器上的组件,它能够对客户端发送到服务器的请求以及服务器返回给客户端的响应进行拦截和处理。通过Filter过滤器,开发者可以在请求到达Servlet之前或响应发送给客户端之前对它们进行各种操作。

    当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。

使用过滤器

与Servlet不同的是,过滤器在启动时就会创建过滤器对象,并执行init方法,而Servlet是在进行第一次请求时才创建对象

使用过滤器的步骤为:

  1. 编写一个类实现javax.Servlet.Filter接口
  2. 重写拦截请求方法doFilter()
  3. 给过滤器进行配置,配置拦截的url

实现接口

实现接口时要注意:导入的包为javax.Servlet包。

实现方法:

public class AFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("AFilter执行");
    }

    /**
     * 用户每请求一次,请求url被过滤器拦截一次,就会执行一次
     * @param filterChain  过滤器链对象
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行doFilter方法");
    }

    @Override
    public void destroy() {
        System.out.println("AFilter即将销毁");
    }
}

值得一提的是,在Filter接口中,init方法和destroy方法为默认方法,有方法体,这是jdk1.8的新特性,这样在实现接口时也能继承这两个方法。

配置拦截的url

    实现接口后并不能直接使用,还需要对其拦截的url进行配置。配置url有两种方法,一种是在xml文件中配置,另外一种是注解配置。

注:不能两种方式同时配置

在xml中进行配置

<!--    过滤器配置-->
    <filter>
        <filter-name>AFilter</filter-name>
        <filter-class>com.fs.filter.AFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AFilter</filter-name>
<!--        拦截的url,一般与通配符一起使用-->
        <url-pattern>/aaa/*</url-pattern>
        <url-pattern>/bbb/*</url-pattern>
<!--        拦截指定名字的Servlet-->
<!--        <servlet-name>LoginServlet</servlet-name>-->
    </filter-mapping>

注解配置

 

过滤器的执行顺序 

xml配置的执行顺序

在XML配置的过滤器中,执行顺序是按照web.xml文件中<filter-mapping>元素的声明顺序来决定的。

注解配置的执行顺序

过滤器会按照其类名的字母顺序进行排序。这意味着类名字符串值较小的过滤器会先被执行。

四种拦截方式

我们来做个测试,写一个过滤器,指定过滤的资源为b.jsp,然后我们在浏览器中直接访问b.jsp,你会发现过滤器执行了!

但是,当我们在a.jsp中request.getRequestDispathcer(“/b.jsp”).forward(request,response)时,就不会再执行过滤器了!也就是说,默认情况下,只能直接访问目标资源才会执行过滤器,而forward执行目标资源,不会执行过滤器

其实过滤器有四种拦截方式!分别是:REQUEST、FORWARD、INCLUDE、ERROR。

  • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST; 默认值

  • FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、jsp:forward标签都是转发访问;

  • INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、jsp:include标签都是包含访问;

  • ERROR:当目标资源在web.xml中配置为<error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

实现错误页面

使用error拦截方式可以实现,当页面出错时,跳转到目标资源,首先要在xml文件中进行配置:

<!--    配置错误页面-->
    <error-page>
<!--        异常类型-->
<!--        <exception-type></exception-type>-->
<!--        错误状态码-->
        <error-code>404</error-code>
<!--        错误页面的路径-->
        <location>/error.jsp</location>
    </error-page>

编写了一个error.jsp,这样在出现404错误时会自动跳转到error.jsp界面。


http://www.kler.cn/a/418405.html

相关文章:

  • HTMLHTML5革命:构建现代网页的终极指南 - 4. 使用元素
  • [AI] 知之AI推出3D智能宠物:助力语言学习与口语提升的新选择
  • 玄机应急:Apache日志分析Mysql应急Redis应急
  • 学习视频超分辨率扩散模型中的空间适应和时间相干性(原文翻译)
  • 大模型翻译能力评测
  • 前端node.js
  • 爬虫技术全解析:从入门到精通
  • FPGA芯片全生命周期流程
  • 手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机
  • vue实现时间倒计时/时间增加组件
  • 基于Vue3+Element Plus 实现多表单校验
  • Oracle 11gR2 Data Guard 搭建 (一主一从)
  • Linux高级文件系统
  • FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现
  • 【C++】getchar() 与 putchar() 的深入解析
  • Transformer?Attention?——Are All You Need!
  • 2个方法教打开把Word文档转换为PDF格式
  • 如何在本地环境中模拟使用https
  • TCP/IP协议簇自学笔记
  • ros2键盘实现车辆: 简单的油门_刹车_挡位_前后左右移动控制
  • 面阵相机的使用和注意事项
  • 基于树莓派3B+的简易智能家居小项目(WiringPi库 + C语言开发)
  • 数据结构(理解)
  • 数据治理体系一般要求
  • Hive高可用配置
  • 33.2 prometheus联邦功能源码解读和它的问题