Filter和Listener学习笔记

news2024/11/23 9:02:15

1.什么是Filter在这里插入图片描述
2.定义过滤器
(注意导的Filter的包来源是Javax.servlet)

/*
定义一个过滤器的步骤:
    1. 自定义一个类实现Filter接口
    2. 把过滤器规则定义在doFilter方法里面
    3. 使用WebFilter注解配置过滤的路径

 */

//过滤的路径
//@WebFilter("/*")  // /*  代表了拦截所有的路径,所有的请求过来都需要经过你的这个过滤器
public class Demo1Filter implements Filter {


    /*
       符合过滤路径的请求过来的时候都会执行doFilter方法
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("过滤器执行了......");
        //放行,允许浏览器访问目标的资源
        chain.doFilter(request,response);
    }


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }



    @Override
    public void destroy() {

    }
}

3.注意过滤器默认只拦截请求
在这里插入图片描述
更改拦截需要修改注解:

@WebFilter(value = "*.jsp",dispatcherTypes ={DispatcherType.FORWARD,DispatcherType.REQUEST} )

拦截的方式:
1. 过滤器默认情况只能拦截浏览器直接访问和请求重定向,对于通过请求转发的方式是没法拦截的
2. 如果需要拦截请求转发的需要使用dispatcherTypes配置。
3. 拦截方式主要有两种: request(默认) 与forward

拦截路径配置方式:
1, 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
2. 目录拦截:/user/:访问/user下的所有资源,都会被拦截
3. 后缀名拦截:
.jsp:访问后缀名为jsp的资源,都会被拦截
4. 拦截所有:/*:访问所有资源,都会被拦截

注意: 不管servlet还是Filter路径的写法,除非是匹配后缀名是*开头,其他一律都需要/开头,否则报错。

如果有多个过滤器形成了过滤器链,执行的顺序取决于类名的顺序。比如Afilter会比Bfilter先执行

4.HttpServletRequest类型转换
request对象与response都是由tomcat服务器创建,而tomcat里面本质上创建的是HttpServletRequest与HttpServletResponse对象,
HttpServletRequest与ServletRequest之间关系是子父接口关系。 你们如果需要使用子接口特有的方法,完全可以强制类型转换

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        //1. 为了能够使用子接口的特有的方法,强制类型转换
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        //2、 获取当前用户的请求方式
        String method = request.getMethod();

        //3. 判断请求方式是否为get还是Post,如果是post需要解决请求参数的乱码问题
        if("post".equalsIgnoreCase(method)){
            request.setCharacterEncoding("utf-8");
        }

        //4. 设置响应乱码问题
        response.setContentType("text/html;charset=utf-8");

        //5. 最终放行
        chain.doFilter(request,response);

    }

5.从session里取值

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
   //1. 把request与response对象强制类型转换
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    //2. 从session中去获取登录成功标记
    HttpSession session = request.getSession();
    Object user = session.getAttribute("user");
    if(user==null){
        //2. 如果还用户没有登录,跳转到登录页面
        response.sendRedirect("/login.jsp");
    }else{
        //如果已经登录,直接放行
        chain.doFilter(request,response);
    }

}

6.Listener
在这里插入图片描述

/*
监听器定义步骤:
    1. 自定义一个类实现对应监听器接口

 */
@WebListener
public class MyContextListener implements ServletContextListener {

    /*
      ServletContext什么创建? 什么时候销毁?
        服务器启动的时候创建,服务器关闭的时候销毁
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {


        System.out.println("======ServletContext 创建的时候调用============");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("============ServletContext销毁的时候调用=========================");
    }
}

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

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

相关文章

用拙劣的Python技术画出的圣诞树(勿喷)

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 一、前言 今天晚上,准备睡觉的我看见了CSDN有活动了,我就立马飞奔到电脑前面 这不,CSDN又举办了一场活动,看着令人心动的奖励和丰富的勋章,我的口水都从眼睛里流出来了(夸张),我准备创造一颗圣诞树,但是又想到我…

「设计模式」责任链模式

「设计模式」责任链模式 文章目录「设计模式」责任链模式一、概述二、结构三、案例实现四、优缺点五、应用场景六、模拟过滤器机制七、拓展八、小结一、概述 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予…

高频时序数据的储存与统计方案

文章目录问题背景解决办法第一步,梳理数据和计算要求第二步,确定存储和计算方案第三步,确定技术选型和方案第四步,实施优化方案后记问题背景 发电设备中常常会放置传感器(DCS)来采集数据以监控设备运转的状…

河海大学软件工程学硕考研复试经验贴

一、写在前面 想必看到这篇文章的学弟学妹都已经考完初试了,考得如何每个人心中各有千秋。无论如何,坚持将考研整个过程走下来的你们就已经是最棒的了,现在可以好好休息一下,静待考研成绩的公布了。 我写下这篇文章的目的主要是…

4.3.1、IPv4 地址概述

1、基本介绍 在 TCP/IP 体系中,IP 地址是一个最基本的概念,我们必须把它弄清楚。 IPv4 地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 比特的标识符。 IP 地址由因特网名…

5.8 什么是学习博主?看两个博主案例【玩赚小红书】

先看大家看两个博主案例 ​ 学习博主,就是专门为用户提供学习方法的人。 学习方法在小红书的内容中属于干货价值,也就是用户们需要的东西,能为他们解决问题的内容,所以是比较受欢迎的,换言之,就是笔记数据…

Spark 3.0 - 15.ML PIC 快速迭代聚类理论与实战

目录 一.引言 二.PIC 理论 1.谱聚类 2.快速迭代聚类 三.PIC 实战 1.数据准备 2.构建 PIC 3.预测与展示 四.总结 一.引言 前面介绍了 K-means 聚类与高斯混合聚类,本文介绍另外一种聚类方法 Power Iteration Cluster 快速迭代聚类,简称 PIC。快…

【架构设计】你的类足够“专一”吗

前言 软件设计SOLID原则中有一个最基础的原则就是单一职责原则,我想绝大部分的程序员都知道,而且都理解它的意思,甚至觉得很简单。但是往往“看懂”和“会用”是两回事,而“用好”更是难上加难。好比我们项目,一开始一…

取代OpenFeign:Spring Framework 6全新声明式客户端@HttpExchange

本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“…

【几种可调动对象,Function和bind;线程的调动方式举例】

1.可调动对象的调动方式 方法 1、函数指针调动 方法2 、类类型的括号的重载 调动可调动对象 #include<iostream> #include<functional> using namespace std; struct Foo {void operator()(int x){cout<<"Foo operator "<<x<<endl;}…

CSS3【定位的基本使用[静态定位\相对定位\绝对定位]、子绝父相、固定定位、元素的层级关系】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、定位1.1定位的基本介绍1.1.1 网页常见布局方式1.1.2 定位的常见应用场景1.2 定位的基本使用1.2.1 定位初体验1.2.2 使用定位的步骤1.2.3 静态定位1.2.4 小结1.2.…

使用 Docker Hub 完美地存储 Helm 图表实战

使用 Docker Hub 完美地存储 Helm 图表实战 Helm 是 Kubernetes 的包管理器。它是一个开源容器编排系统。它通过提供一种简单的方法来定义、安装和升级复杂的 Kubernetes 应用程序&#xff0c;帮助您管理 Kubernetes 应用程序。 使用 Helm&#xff0c;您可以将您的应用程序打包…

git教程

教程目录Git 教程Git 与 SVN 区别Git 与 SVN 区别点&#xff1a;Git 安装配置Linux 平台上安装Debian/UbuntuCentos/RedHatWindows 平台上安装Mac 平台上安装Git 配置用户信息文本编辑器##差异分析工具查看配置信息Git 工作流程Git 工作区、暂存区和版本库基本概念Git 创建仓库…

semargl 软件使用方法简介

文章目录前言一、semargl 软件使用简介1.semargl 软件简介2.准备演示软件操作所需的数据3.使用 semargl 获取频谱关系4.使用 semargl 获取特定频率模式的空间分布5.使用 semargl 获取自旋波的色散关系二、笔记05第三节内容的补充1.优化多进程读取磁化数据文件的代码2.新增获取特…

【JavaSE】 常用类(447~515)

String 447.常用类-每天一考 1.画图说明线程的生命周期&#xff0c;以及各状态切换使用到的方法等 状态&#xff0c;方法 2.同步代码块中涉及到同步监视器和共享数据&#xff0c;谈谈你对同步监视器和共享数据的理解&#xff0c;以及注意点。 synchronized(同步监视器){//操…

Python手势识别与追踪

程序示例精选 Python手势识别与追踪 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Python手势识别与追踪>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 应…

【日常】圣诞节、颜色⛄

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 关于圣诞节&#x1f384;&#xff0c;大家想到什么颜色&#xff1f;⛄&#x1f98c;&#x1f381;&#x1f385;&#x1f525; demo online - https://codepen.io/adamlindqvist/pen/EaPeJg html <!-- Christ…

详细介绍关于自定义类型:结构体、枚举、联合【c语言】

文章目录结构体结构体的声名特殊的声明结构成员的类型结构的自引用结构体变量的定义和初始化结构体内存对齐修改默认对齐数结构体变量访问成员结构体传参结构体实现位段&#xff08;位段的填充&可移植性&#xff09;位段的内存分配位段的跨平台问题枚举枚举类型的定义枚举的…

【Linux】用户与用户组操作_补

文章目录一.用户1.1 用户与用户组概念1.2 与用户管理相关的系统文件1.3 查看用户组1.3.1用户组密码配置文件&#xff0f;etc&#xff0f;gshadow1.4用户管理创建用户修改用户添加密码一.用户 1.1 用户与用户组概念 用户和用户组的对应关系有&#xff1a;一对一、一对多、多对一…

【C语言进阶】指针练习题

写在前面 这是指有关指针的小题 正文 练习一 int main() {int a[5][5];int (*p)[4];pa;printf("%p,%d", &p[4][2]-&a[4][2], &p[4][2]-&a[4][2] );return 0; } 解析&#xff1a; a[4][2]为如图粉色部分&#xff0c;p[4][2]为如图蓝色部分。a的…