深入理解JavaWeb(五)——过滤器和监听器

深入理解JavaWeb(五)——过滤器和监听器

摘要:在基于Java-Web核心技术的开发应用中,为了一些特定的用途或目的,那么Filter和Listener就要闪亮登场了。在本文中我们来聊一聊Servlet规范中的另俩技术的核心知识点,即过滤器和监听器。
作者:来自ArimaMisaki创作

文章目录

  • 深入理解JavaWeb(五)——过滤器和监听器
  • 7 Filter
    • 7.1 Filter概述
    • 7.2 Filter基本使用
    • 7.3 Filter执行流程
    • 7.4 Filter使用细节
    • 7.5 过滤器链
    • 7.6 Listener

7 Filter

7.1 Filter概述

说明:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一;过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能,如权限控制、统一编码处理、敏感字符处理等等。

提示:实际上,过滤器交给前端来做比较好。


7.2 Filter基本使用

使用

  1. 定义类并实现Filter接口(javax.servlet.Filter),并重写所有方法
  2. 配置Filter拦截资源的路径,在类上定义@WebFilter注解
  3. 在doFilter方法中输出一句话,并放行

步骤演示

  1. 新建一个filterDemo类,接上接口,重写方法,加上注解

    package web.filter;import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;@WebFilter("/*")
    public class FilterDemo implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("FilterDemo");}public void destroy() {}
    }
    
  2. 新建一个hello.jsp文件

    <%--Created by IntelliJ IDEA.User: ArimaMisakiDate: 2022/10/4Time: 14:03To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head><title>Title</title>
    </head>
    <body><h1>hello jsp</h1><%System.out.println("hello jsp~");%>
    </body>
    </html>
    
  3. 开启服务,访问hello.jsp,发现由于没有在doFilter中放行,导致被拦截

    image-20221005133402705

  4. 修改拦截类,添加放行

    package web.filter;import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;@WebFilter("/*")
    public class FilterDemo implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("FilterDemo");filterChain.doFilter(servletRequest, servletResponse);}public void destroy() {}
    }
    
  5. 重新执行步骤3

    image-20221005134639181


7.3 Filter执行流程

说明:在开启服务时,我们可以在拦截的前后都设置处理逻辑,相当于你在地铁站检票,在进站口检票通过了(放行前)允许(放行)进地铁(访问资源),出来还要刷一次出站票(放行后)。

总结来看就是:执行放行前逻辑-》放行-》访问资源-》执行放行后逻辑

image-20221005133721196


7.4 Filter使用细节

说明:可以根据不同的需求配置不同的路径来对资源进行拦截

  • 拦截具体的资源:/index.jsp
  • 目录拦截:/user/*
  • 后缀名拦截:*/.jsp
  • 拦截所有:/*

7.5 过滤器链

说明:一个Web应用可以配置多个过滤器,这多个过滤器称为过滤器链;其中多个过滤器一起使用时需要清楚执行流程,如果你对递归有着足够的熟悉,理解这个对你来说就不是什么难事;此外,通过注解配置的Filter,多个过滤器的先后顺序是按照类名的自然排序(26个字母的排序方式)来确定的。

image-20221005141045675


7.6 Listener

说明:监听器可以监听application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。但由于在现代开发中已经很少使用Listener了,故这里不做过多讲解。

分类

监听器分类监听器名称作用
ServletContext监听ServletContextListener用于对ServletContext对象进行监听
ServletContextAttributeListener对ServletContext对象中的属性的监听
Session监听HttpSessionListener对Session对象的整体状态监听
HttpSessionAttributeListener对Session对象中的属性监听
HttpSessionBindingListener监听对象在Session的绑定和解除
HttpSessionActivationListener对Session数据的钝化和活化的监听
Request监听ServletRequestListener对Request对象进行监听
ServletRequestAttributeListener对Request对象中属性的监听

使用:在使用的时候,只需创建类,接上对应监听器接口,并且重写方法,最后加上@WebListener注解即可使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit:2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Special JudgeProblem Description 娜娜离开了这个王国&#xff0c;走向远方&#xff0c;在旷野上&#xff0c;娜娜看到了一个大时钟&#xff0c;上面的…

DB2 常用操作命令集合

1、 打开命令行窗口 #db2cmd 2、 打开控制中心 # db2cmd db2cc 3、 打开命令编辑器 db2cmd db2ce 操作数据库命令 4、 启动数据库实例 #db2start 5、 停止数据库实例 #db2stop 如果你不能停止数据库由于激活的连接&#xff0c;在运行db2stop前执行db2 force applica…

vue-resource跨域问题

如果是cli 就在config/index.js配置proxyTable proxyTable: {/login: {target: http://192.168.0.240:8888,changeOrigin: true,pathRewrite: {^/login:}}}, 转载于:https://www.cnblogs.com/GuGuT3T/p/8807923.html

ps一点等于多少厘米_劝告大家:女人40岁后,体重多少算正常?太瘦也不好

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。由于身高、骨骼、体型和体重的不同&#xff0c;与男性相比&#xff0c;女性将相…

【GitLab】CentOS安装GitLab最佳实践

环境 [rootiZ2851te7e5Z ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.1.1503 (Core) Release: 7.1.1503 Codename: Core服务器安装了 PHP7Nginx,占用80端口Mysql安装 安装采用官…

java xml转map_java练习本(原每日一练)(20190514)

名人名言昨日翻译“The No. 1 reason people fail in life is because they listen to their friends, family, and neighbors.”——Napoleon Hill“人们生活中失败的第一个原因是他们听取朋友、家人和邻居的意见。”——拿破仑希尔今日名言“Your time is limited, so don’t…

查找单链表中间节点

解决方案&#xff1a; 设立两个指针&#xff0c;一个单步走&#xff0c;一个两步走&#xff0c;当大步指针到达链表尾部的时候&#xff0c;小步指针也正好位于链表中间位置。 转载于:https://www.cnblogs.com/hj-blog/p/4430844.html

? SegmentFault Hackathon 文艺复兴上海站作品集 - 获奖篇

承上回&#xff0c;在 Day 1 中&#xff0c;石墨文档、Agora.io 声网和 HPE 的技术团队针对自家的 SDK、API 等作了深度介绍&#xff0c;今天就来看看我们的开发者是如何将作品和服务关联起来的吧。 跳蚤市场 24 小时的编程&#xff0c;艺术家都将什么作品搬上自己的摊位&#…

Solidity 官方文档中文版 2_Ethereum 智能合约介绍

一个简单的智能合约 先从一个非常基础的例子开始&#xff0c;不用担心你现在还一点都不了解&#xff0c;我们将逐步了解到更多的细节。 Storage contract SimpleStorage {uint storedData;function set(uint x) {storedData x;}function get() constant returns (uint retVal)…

华为手机云闪付付款码如何截图_云闪付乘车码,它带着优惠又来了

云闪付乘车码又来了&#xff01;想必这段时间大家有些(甚是)想念薅羊毛的日子想起那快乐时光嘴角总是不经意的偷偷乐不多说了&#xff0c;直接上优惠特别提醒&#xff1a;1分钱乘公交5折乘地铁......详戳▼▼▼银联信用卡1分钱乘公交活动时间&#xff1a;2019年12月6日—2019年…

读《构建之法》1-5章

《构建之法》第一至五章&#xff0c;我了解了软件工程的重要性&#xff0c;它就像楼房的建设&#xff0c;是一项大工程&#xff0c;必须有设计&#xff0c;步骤&#xff0c;工具&#xff0c;有能力&#xff0c;有计划&#xff0c;还要有团队合作才有可能实现这么一个工程。 第一…

ChemDraw教程:如何查看和删除俗名

化学范畴里&#xff0c;允许用俗名表示ChemDraw原子标记或原子标记的一部分&#xff0c;可以定义俗名的快捷键也可以自由查看或删除俗名&#xff0c;熟练掌握可以提高ChemDraw软件使用效率&#xff0c;下面将具体介绍此部分内容。 一、查看俗名 查看已定义俗名的方法有两种&…

850是什么意思_850是什么意思

1. 850的近义词1. The United Nations says more than eight hundred fifty million people do not have enough food.联合国公布了有超过850&#xff0c;000&#xff0c;000的人食不果腹。2. danci.911cha.com2. The results show that the TiO_2 thin films are composed of …

[HNOI2012]矿场搭建

题解&#xff1a; 首先显然这是要缩点的 缩点双 直接对割点之间的联通块判断一下连着几个割点 连0个 cnt*&#xff08;cnt-1&#xff09;/2 连1个 cnt 连2个 0 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define ll long long #define N 2000 bool …

地图与定位之定位

今天开始总结一下地图与定位。首先要使用定位就要引用框架CoreLocation.framework,在类文件中加入#import <CoreLocation/CoreLocation.h>,其次在IOS8中调用的时候要在Info.plist中加两个Key,NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription,具体…

merge into ORA-30926

ORA-30926: 无法在源表中获得一组稳定的行 同时要求在一张表中添加一个字段&#xff0c;由于数据量较大&#xff0c;想使用merge into update的方式将数据 meger into xxx1 t1 using(select * from xxx2 )t2 on(t1.xmt2.xm and t1.dzt2.dz) when matched then update set tra…

rocketmq 如何保证高可用_RocketMq容灾、高可用方案

一、实现分布式集群多副本的三种方式1.1 M/S模式即Master/Slaver模式。该模式在过去使用的最多&#xff0c;RocketMq之前也是使用这样的主从模式来实现的。主从模式分为同步模式和异步模式&#xff0c;区别是在同步模式下只有主从复制完毕才会返回给客户端&#xff1b;而在异步…

Debian 9 strech 安装 ROS lunar

1. 配置源 按照我以前的博客配置或者按照wiki上的配置。 2. sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list3. sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:…

谈Find指令

Linux下find命令在目录结构中搜索文件&#xff0c;并执行指定的操作。Linux下find命令提供了相当多的查找条件&#xff0c;功能很强大。由于find具有强大的功能&#xff0c;所以它的选项也很多&#xff0c;其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系…

数据库原理归档——对于数据库原理最全的总结

恭喜你来到新天地&#xff01; 以下的笔记是我复习了三次总结出来的&#xff0c;属于一个归档。目前还在对以往的知识做一个更加详细地总结&#xff0c;所以仍在更新中。这份笔记对于新手入门数据库来说十分友好&#xff0c;语言通俗易懂。在数据库中&#xff0c;还涉及到很多…