深入理解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,一经查实,立即删除!

相关文章

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

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

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…

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

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

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

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

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

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

谈Find指令

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

k8s部署tomcat及web应用_部署 Spring Boot 应用到 K8S 教程

点击上方 Java后端&#xff0c;选择 设为星标优质文章&#xff0c;及时送达作者&#xff1a;qingmuqingmu.io/2020/04/08/Spring-Boot-Operator-User-Guide/前言在Kubernetes中部署spring boot应用整体上来说是一件比较繁琐的事情&#xff0c;而Spring Boot Operator则能带给你…

Web性能优化分析

如果你的网站在1000ms内加载完成&#xff0c;那么会有平均一个用户停留下来。2014年&#xff0c;平均网页的大小是1.9MB。看下图了解更多统计信息。 直击现场 《HTML开发MacOSApp教程》 http://pan.baidu.com/s/1jG1Q58M 网站的核心内容需要在1000ms内呈现出来。如果失败了&a…

闭包/Block当成函数参数实现回调

2019独角兽企业重金招聘Python工程师标准>>> Swift // MARK:// MARK: 获取数据/// 获取数据class func toolLoadData(completion:(finish: String) -> ()? ,content: String) {self .nextStepRequest({ (finish) -> ()? in// 接收到数据 调用 block 传递数据…

使用labview读取一副位图,并进行BCG校准(或修改其BCG)程序解析

进行图像处理第一步肯定就是要读取一副图片&#xff0c;然后再进行图像的BCG校准。 首先讲解一下用到的函数第一个函数为IMAQ Create&#xff0c;位于 视觉与运动--Vision Utilities---Image Management---IMAQ create 函数如图&#xff0c;对于如何看函数功能&#xff0c;还是…

实现生成小学四则运算练习题

实现小学四则运算练习题 1.题目要求 本次作业要求两个人合作完成&#xff0c;驾驶员和导航员角色自定&#xff0c;鼓励大家在工作期间角色随时互换&#xff0c;这里会布置两个题目&#xff0c;请各组成员根据自己的爱好任选一题。 题目1&#xff1a; 我们在刚开始上课的时候介绍…

[转] 64位windows下添加postgreSQL odbc数据源

系统环境&#xff1a;windows7 64位 postgreSQL9.0&#xff08;64bit)ps&#xff1a;安装postgreSQL时确定安装了odbc驱动。问题&#xff1a;点击“开始-》控制面板-》管理工具-》数据源&#xff08;ODBC&#xff09;-》用户DSN-》添加”&#xff0c;未出现postgreSQL关联选项。…

Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)

1 试用了MysqlWorkBench的数据迁移功能 以为能实现&#xff1a;建立跟Sqlserver一样的表结构和视图的功能&#xff0c;sqlserver的数据迁移到mysql 实际上发现&#xff1a;即使勾选了表和视图&#xff0c;实际上却只能建立表结构。 视图结构&#xff0c;表数据&#xff0c;都没…

vscode 默认初始化_Visual Studio Code(vscode)使用介绍

[TOC]vscode 安装软件直接在vscode官网&#xff08;https://code.visualstudio.com/&#xff09;下载安装。建议将下图红框中勾选&#xff0c;安装完成后可通过鼠标右键打开vscode。安装界面使用介绍插件安装安装完成后&#xff0c;左侧栏可以看到不同模块&#xff0c;一开始包…

梯度下降法分析

梯度下降法存在的问题 梯度下降法的基本思想是函数沿着其梯度方向增加最快&#xff0c;反之&#xff0c;沿着其梯度反方向减小最快。在前面的线性回归和逻辑回归中&#xff0c;都采用了梯度下降法来求解。梯度下降的迭代公式为&#xff1a; \(\begin{aligned} \theta_j\theta_j…

PHP程序员的技术成长规划

2019独角兽企业重金招聘Python工程师标准>>> 按照了解的很多PHP/LNMP程序员的发展轨迹&#xff0c;结合个人经验体会&#xff0c;抽象出很多程序员对未来的迷漫&#xff0c;特别对技术学习的盲目和慌乱&#xff0c;简单梳理了这个每个阶段PHP程序员的技术要求&#…

flink 入门

http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me/blog/2016/05/09/flink-internals-understanding-execution-resources/ 要了解一个系统&#xff0c;一般都是从架构开始。我们关心的问题是&#xff1a;系统部署成功后…

mybatis 多租户saas_彻底理解微商城多租户Saas架构设计

原文链接&#xff1a;https://blog.csdn.net/haponchang/article/details/104246317&#xff0c;感谢作者提供这么好的总结&#xff01;1.具体的SaaS架构必须1.先仔细选择最适合应用程序需求的租户模型&#xff0c;2.需要根据租户模型来选定最终的架构&#xff0c;即应用程序设…

Python模块——subprocess

subprocess模块 通过Python去执行一条系统命令或脚本。 三种执行命令的方法 subprocess.run(*popenargs, inputNone, timeoutNone, checkFalse, **kwargs) #官方推荐 subprocess.call(*popenargs, timeoutNone, **kwargs) #跟上面实现的内容差不多&#xff0c;另一种写法 sub…

异步传参

2019独角兽企业重金招聘Python工程师标准>>> AJAX样板 $.ajax ({ type:"post", url:"要传递参数的地址", data:{id:id}, success:function(val) { …