少女祈祷中 . . .|

园龄:粉丝:关注:

2023-02-23 12:36阅读: 26评论: 0推荐: 0

Filter过滤器与监听器

Filter过滤器

一、什么是过滤器


Filter过滤器是JavaWeb中三大组件之一(三大组件:Servlet程序、Filter过滤器、Listener监听器)
Filter是javaEE的规范,也就是接口

二、过滤器的作用


拦截请求,过滤响应:

解释:过滤器可以把请求的资源拦截下来,在拦截过程中加上一些代码、功能实现一些特殊的功能

说明:过滤器在访问每一个资源的时候都会被执行,我们可以在过滤器中加上一些拦截性的操作

过滤器拦截请求常见的应用场景:

- 权限检查
- 日志操作
- 事务处理
- 统一编码处理
- 敏感数据拦截

三、Filter过滤器的使用


1.Filter的访问
  1. xml配置

    <web-app>
    ...
    <filter>
    <!-- 为filter起别名-->
    <filter-name>FilterTest</filter-name>
    <!-- 具体过滤器的全类名-->
    <filter-class>com.filter.FilterTest</filter-class>
    </filter>
    <filter-mapping>
    <!-- 访问某个路径时调用哪个filter-->
    <filter-name>FilterTest</filter-name>
    <!-- 什么路径可以访问到filter-->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    </web-app>
  2. 注解

    //什么路径可以访问该filter
    @WebFilter("/*")
2.Filter的使用步骤
  1. 新建类实现Filter接口
  2. 根据需要重写Filter接口的方法(必须重写doFilter,也就是过滤器功能的方法)
  3. 在doFilter方法中定义相关的逻辑(记得判断并放行)
//执行方法
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//放行
chain.doFilter(request, response);
}
3. 生命周期
- 构造方法 -|
基本一起,在web工程启动后创建对象,然后初始化
- init()------初始化 -|
- doFilter()--执行 每次只要有请求都会拦截并执行
- destory()---销毁 停止web工程时自动销毁
4.Filter的拦截路径

拦截路径表示filter对哪些请求进行拦截(访问所有资源,都会被拦截)

  1. 拦截jsp

    @WebFilter("*.jsp")
  2. 拦截某一个目录下

    @WebFilter("/a/*")
  3. 拦截某一个路径

    @WebFilter("/index.jsp")
  4. 放行资源、路径与设置编码

    //将ServletRequest转换成HttpServletRequest子对象
    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    //设置网页请求编码
    httpServletRequest.setCharacterEncoding("utf-8");
    //设置服务器响应编码
    response.setContentType("text/html;charset=utf-8");
    //放行资源\路径
    String[] paths = {"/imgs/", "/css/", "/js/", "/login.jsp", "/loginServlet", "/register.jsp", "/enrollServlet"};
    //获取当前路径
    String url = httpServletRequest.getRequestURL().toString();
    //比对路径
    for (String str : paths) {
    //判断路径中是否存在放行的资源\路径
    if (url.contains(str)) {
    //放行
    chain.doFilter(request, response);
    return;
    }
    }

四、过滤器链


Filter过滤器链是指在 Web 应用中,部署了多个 Filter 来拦截同一目标资源的情况;Filter 链中的 Filter 的执行顺序由 <filter-mapping> 标签的配置顺序决定(A-Z)

Filter 链中的任何一个 Filter 没有调用 FilterChain.doFilter() 方法,请求都不会到达目标资源

五、FilterConfig


FilterConfig就是filter过滤器的配置文件类,tomcat每次在创建filter的时候就会同时创建一个FilterConfig类

包含的配置信息:

//获取过滤器的FilterName
System.out.println(config.getFilterName());
//获取初始化参数中的参数
System.out.println(config.getInitParameter(""));
//application
ServletContext servletContext = config.getServletContext();

Listener监听器


监听器是监听域对象(application session request)创建、销毁或者添加、修改、删除属性发生改变时自动执行的一些代码的操作

说明:request和session指的就是我们学习过的请求对象、会话对象、application指的是ServletContext对象

ServletContext代表的是当前的整个web项目,在服务启动时tomcat也会自动创建该对象,关
闭服务器就自动销毁

监听器的分类:

image-20230223143027169

本文作者:顔をして

本文链接:https://www.cnblogs.com/ynxiyan/p/17147527.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   顔をして  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 I Really Want to Stay at Your House Samuel Kim,Lorien
  2. 2 将月亮藏进躯体 豆芽鱼(庄东茹)
  3. 3 辞九门回忆 解忧草,冰幽
  4. 4 I'M Not Girl 伊晗
将月亮藏进躯体 - 豆芽鱼(庄东茹)
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周仁

作曲 : 音融三喜/是的麦克雷

制作人 : 庄侃/照明

万籁寂静 息事宁人 冷场冷清

暴雨刚叫停 洗过的风景

和善的陷阱

无人机 低空的飞行

航拍我落寞的表情

你的眼睛 游离在半空

无情

摆手神情 消失黎明 目光随行

噩梦里清醒 逃脱的侥幸

我的动情 该没怎么使用

却已经剧终

我将月亮藏进了躯体

葬于那片无光的禁区

纵容它野蛮生长本意

怀疑一旦产生 罪名就成立

我将月亮藏进了躯体

藏好它那白色的外衣

黑暗里寻觅静止空气

那不是风 是睡熟的空气

摆手神情 消失黎明 目光随行

噩梦里清醒 逃脱的侥幸

我的动情 该没怎么使用

却已经剧终

我将月亮藏进了躯体

葬于那片无光的禁区

纵容它野蛮生长本意

怀疑一旦产生 罪名就成立

我将月亮藏进了躯体

藏好它那白色的外衣

黑暗里寻觅静止空气

那不是风 是睡熟的空气

监制 : 苏斌

制作公司 : 三喜音乐(深圳)有限公司

企宣统筹 : 火焰波比

【未经著作权人许可,不得以任何方式使用】