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

java求职学习day38

                                                   第五章 Filter+Listener核心技术

5.1 Filter过滤器(重点)

5.1.1 基本概念

Filter本意为过滤的含义,是JavaWeb的三大组件之一,三大组件为:ServletFilter
Listener
过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件。
过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求
进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。
分析:我们说一说在JAVA web项目里面,我们的filter到底是实现了一个什么样的功能?对不对?或者说它到底是如何工作的呢?

5.1.2 工作方式

分析:

在这张图里面,我觉得有几个内容,大家应该还是非常熟悉的,比如说左侧的浏览器,比如说右侧的外部资源,

实际上是不是就代表的是我们的外部服务器呀?这不就是我们在讲JAVA web的时候,一开始所讲的BS架构呗。对不对?当然,这个外部资源可以是静态的,也可以是动态的,有印象吧?我们前面画的那张图。只不过呢,学完过滤器之后啊,我们会发现在我们的浏览器跟外部服务器中间又多了一层叫过滤器。那它的话呢,你就把它想象成是一道过滤网。也就是说,

它能做什么事情,它可以进行数据的过滤呗。明白这意思吧,好,那具体的工作流程又是怎么进行的呢?首先还是通过浏览器发送请求。那么,当我们发送请求的时候,大家要注意它跟以前我们讲的BS架构不一样的地方在于,不再是单纯的将这个请求发送到。外部服务器,而是将这个请求发给哪里,发给了过滤器。明白这意思吧,好那么当我们的过滤器接收到这个请求之后呢,

我们可能会对请求的内容或者数据进行修改。我可能要进行判断,我甚至可能进行拦截等等一系列操作之后,经过过滤器之后,再将这个请求交给外部服务器。那当然了,外部服务器呢?接到这个请求之后,要做出响应,但是大家注意观察,做出响应的时候也是同样的,先将这个响应信息。交给了过滤器。明白这意思吧,再通过过滤器,

最终是不是交给了我们的浏览器显示出来?对吧,这是它的一个工作方式。

那有的小伙伴可能在想那过滤器在我们的以后开发中到底都有哪些作用呢?在这张图里面啊,实际上已经给大家罗列了三种场合,对吧?第一种场合叫身份的认证。啥意思啊?就是我要去验证一下,或者说认证一下你是否是已经登录?对不对?如果你登录了注册了,登录了,那你有你该具备的会员的一些什么来着?甚至VIP的一些什么来着?权限呗。当然,你如果的话呢?充钱了是不?那就是v VIP。是不是好,这是我们要做的身份认证,

还有可能呢,我们要进行一些什么来着,资源的审核就说你当前登录的这个账户是否有权限来访问?我这里面的某些资源呢,对不对?你v可能有些数据的话是v VIP是不是才能访问的?是不是所以我可以进行审核,

当然我们还可以对我们的数据进行加密,防止第三方窃取。对不对?所以这是我们过滤器的一个工作流程,

你只需要把它想象成就是浏览器,跟我们web服务器中间的一道过滤网就可以了。明白了吧好,这是有关于我们filter的基本概念和工作方式,目前就介绍到这里。

5.1.3 使用方式

自定义类实现Filter接口并重写doFilter方法。
public class LoginFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,ServletException {
//TODO 处理逻辑,必须调用下面的方法
chain.doFilter(request,response);
}
}
web.xml文件中配置过滤器。
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.lagou.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

分析:

接下来我们说一说过滤器具体的一个使用方式,那么首先呢,我们先回想一个这样的场景,你们呢?平时在上网的时候有没有遇到过一个这样?这样的情况呢?什么呢?就是我们的话呢?明明呢?在很开心的浏览网页,而且很高兴的见到了一个我们期待已久的资源。对不对?于是有些小伙伴情不自禁,迫不及待的,是不是就想点击右下方的下载按钮?对不对?但是当我们点击完按钮之后。让人很不开心的一件事情就发生了,就是立刻弹出一个新的界面,要求我们怎么办?登录或者注册。对不对?那我相信很多小伙伴应该都经历过这样的场景,对不对?

那这一点是怎么做到的呢?实际上就是我们的过滤器。那接下来我带着大家来模拟这么一个场景,当然要想模拟这么一个场景,首先我们是不是得要先有一个登录,还有我们的一个主页面?

那么到目前为止呢,我们已经实现了这个前端页面,以及我们后面的。servlet对不对?但是接下来的话呢,有一个很大的问题,什么问题呢?就是无论用户登录成功还是失败,我们实际上是不是仅仅是在后台里面?做了一个输出信息,对不对?

但是大家会发现,在我们的前端页面里面根本就没有任何的。提示或者反馈,那这样一来呢,会带来一个什么问题,你想想假设你是这样的一个用户的时候,当你输完用户名儿密码之后,没有反应,给你一个空白页面。你会有一个什么样的感受,

5.1.4 Filter接口

1)基本概念
javax.servlet.Filter接口主要用于描述过滤器对象,可以对资源的请求和资源的响应操作进行筛选
操作。
2)常用的方法

5.1.5 FilterConfig接口

1)基本概念
javax.servlet.FilterConfig接口主要用于描述过滤器的配置信息。
2)常用方法

5.1.6 多个过滤器的使用

如果有多个过滤器都满足过滤的条件,则容器依据映射的先后顺序来调用各个过滤器。

5.1.7 过滤器优点

实现代码的可插拔性,即增加或减少某个功能模块,不会影响程序的正常执行。
可以将多个相同处理逻辑的模块集中写在过滤器里面,可实现重复利用、也方便代码的维护。

5.2 Listener监听器(重点)

5.2.1 基本概念

Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。
容器产生的事件分类如下:
生命周期相关的事件。
属性状态相关的事件。
存值状态相关的事件。
底层原理是采用接口回调的方式实现。

5.2.2 基本分类

5.2.3 监听器详解

1ServletRequestListener监听器
ServletRequest创建和关闭时都会通知ServletRequestListener监听器。
常用方法如下:
2ServletRequestAttributeListener监听器
ServletRequest添加、删除或者替换一个属性的时候,将会通知
ServletRequestAttributeListener监听器。
常用方法如下:

3HttpSessionListener监听器
当一个HttpSession刚被创建或者失效(invalidate)的时候,将会通知HttpSessionListener监听
器。
常用方法如下:
4HttpSessionAttributeListener监听器
HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributeListener
听器。
常用方法如下:
5ServletContextListener监听器
ServletContext创建和关闭时都会通知ServletContextListener监听器。
常用方法如下:
6ServletContextAttributeListener监听器
ServletContext添加、删除或者替换一个属性的时候,将会通知
ServletContextAttributesListener监听器
常用方法如下:
7HttpSessionBindingListener监听器
HttpSession中绑定和解除绑定时,将会通知HttpSessionListener监听器。
常用方法如下:
8HttpSessionActivationListener监听器
当有session数值的钝化和活化操作时,将会通知HttpSessionActivationListener监听器。
常用方法如下

配置context.xml文件的方式如下:
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true">
<!-- 配置文件存放的路径信息,可以自由指定 -->
<Store className="org.apache.catalina.session.FileStore"
directory="C:\session"/>
</Manager>

5.2.4 实战案例

自定义类实现监听器接口并重写相关的方法。
public class OnlineUser implements HttpSessionListener,ServletContextListener {
ServletContext ctx = null;
// 初始化ServletContext
public void contextInitialized(ServletContextEvent e) {
ctx = e.getServletContext();
}
// 销毁ServletContext
public void contextDestroyed(ServletContextEvent e) {
//将ServletContext设置成null;
}
// 当新创建一个HttpSession对象时
public void sessionCreated(HttpSessionEvent e) {
//将当前的在线人数加上1,并且保存到ServletContext(application)中
}
// 当一个HttpSession被销毁时(过期或者调用了invalidate()方法)
public void sessionDestroyed(HttpSessionEvent e) {
//将当前人数减去1,并且保存到ServletContext(application)中
}
}
web.xml中配置监听器
<listener>
<listener-class> com.lagou.listener.OnlineUser </listener-class>
</listener>

http://www.dtcms.com/a/477534.html

相关文章:

  • Golang—channel
  • 推三返一链动模式图解
  • 【人工智能与机器人研究】一种库坝系统水下成像探查有缆机器人系统设计模式
  • Qt---setAttribute设置控件或窗口的内部属性
  • 储能的“胜负手”:容量、策略与经济性如何平衡?
  • 蓝桥杯出局,少儿编程的价值祛魅时刻?
  • TensorFlow2 Python深度学习 - 使用TensorBoard可视化数据
  • wordpress忘记了密码忘记网站优化文章
  • 怎么看网站用哪个系统做的泰安集团网站建设方案
  • 在 openEuler 上为 LLVM/ASan 增强 wchar_t 字符串函数支持的开源贡献实践
  • git的命令
  • php mysql 网站源码北京网络营销培训
  • 科普:在分布式系统日志分析中的概念:`span`、`child_spans` 和 `trace`
  • 视频融合平台EasyCVR在智慧水利中的实战应用:构建全域感知与智能预警平台
  • 基于区块链的分布式密钥管理系统:构建去中心化、高可信的密码基础设施
  • 【Linux】进程控制(三) 自定义 Shell 命令行解释器的实现与进程协作实践
  • (论文速读)TRIP: 基于图像噪声先验的时间残差学习图像到视频生成模型详解
  • 查询建筑企业网站qq云 wordpress
  • MoonBit Pearls Vol.11:正则表达式引擎的两种实现方法:导数与 Thompson 虚拟机
  • 激光测距用高精度时间测量(TDC)电路——MS1205N
  • C语言⽂件操作讲解(总)
  • 计算时间复杂度
  • 【ComfyUI】视频替换背景
  • 天形、地气、人神:一种基于阴阳三元论的统一智能理论框架研究
  • 南通市经济开发区建设局网站网站建设企业网银e路通
  • Spring Boot 集成 WebSocket 的实战案例
  • 1-Ubuntu上创建脚本一键更换软件源
  • 【第2篇】nl2sql2025开发环境配置
  • 用 PyTorch 实现 MNIST 手写数字分类与训练损失曲线绘制
  • 获取 OpenAI API Key 全攻略:从入门配置Key到 GPT-5 Pro 集成与安全实战