JavaWeb05

一、Listener监听器

1、简介

Listener是Servlet规范中的一员

在Servlet中,所有的监听器接口都是以Listener结尾

监听器实际上是Servlet规范留给JavaWeb程序员的一些特殊时机

当在某些时机需要执行一段Java代码时,可以用对应的监听器

2、常用的监听器接口

(1)jakarta.servlet 包下:

ServletContextListener、ServletContextAttributeListener

ServletRequestListener、ServletRequestAttributeListener

(2)jakarta.servlet.http 包下:

HttpSessionListener

HttpSessionAttributeListener、HttpSessionBindingListener

HttpSessionIdListener、HttpSessionActivationListener

3、实现一个监听器的步骤

(1)以ServletContextListener为例

编写一个类实现ServletContextListener接口

这个监听器监听的是ServletContext对象的创建和销毁

监听器中的方法不需要程序员调用,在特定事件发生时由服务器调用

@WebListener
public class MyServletContextListener implements ServletContextListener {@overridepublic void contextInitialized(ServletContextEvent sce) {// 这个方法在ServletContext对象被创建时调用    }@overridepublic void contextDestroyed(ServletContextEvent sce) {// 这个方法在ServletContext对象被销毁时调用    }
}

(2)在web.xml文件中配置这个监听器

也可以使用 @WebListener 注解

<listener><listener-class>自己实现的监听器类的全类名</listener-class>
</listener>

4、其他监听器

(1)XxxxAttributeListener

监听的是某个域中的attribute被增加、修改、删除

只要域中的数据发生变化,就执行相应的方法

(2)XxxxBindingListener

例如,一个JavaBean实体类实现了HttpSessionBindingListener接口

那么当这个实体类的对象被放入session的attribute中触发bind事件,移除触发unbind事件

这个实体类不需要使用 @WebListener注解

(3)HttpSessionIdListener

监听Session对象的Id,当Id改变时调用类中的唯一的方法

(4)HttpSessionActivationListener

监听Session对象的钝化和活化

钝化:session对象从内存中存储到硬盘文件

活化:session对象从硬盘文件中恢复到内存

二、MVC架构模式

1、简介以及示意图

2、JDBC工具类的封装

public class DBUtil {private static ResourceBundle bundle = ResourceBundle.getBundle("resources/jdbc");private static String driver = bundle.getString("driver");private static String url = bundle.getString("url");private static String user = bundle.getString("user");private static String password = bundle.getString("password");// 工具类的所有方法都是静态的// 将构造方法私有化,防止创建对象private DBUtil() {}static {try {Class.forName(driver);                    } catch (ClassNotFoundException e) {e.printStackTrace();        }}private static ThreadLocal<Connection> local = new ThreadLocal<>();// 没有使用数据库连接池,直接创建连接对象public static Connection getConnection() throws SQLException {Connection conn = local.get();if (conn == null) {conn = DriverManager.getConnection(url, user, password);        local.set(conn);}return conn;}public static void close(Connection conn, Statement stmt, ResultSet rs) {if (conn != null) {try {conn.close(); local.remove();           } catch (SQLException e) {throw new RuntimeException(e);        }}if (stmt != null) {try {stmt.close();            } catch (SQLException e) {throw new RuntimeException(e);        }}if (rs != null) {try {rs.close();            } catch (SQLException e) {throw new RuntimeException(e);        }}    }}

3、MVC架构模式与三层架构的关系

三层架构:表现层、业务逻辑层、持久化层

表现层对应V和C

M包括了业务逻辑层和持久化层

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

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

相关文章

科普:在Windows个人电脑上使用Docker的极简指南

在Windows个人电脑上使用Docker的极简指南&#xff1a; 1. 快速安装 下载安装包&#xff08;若进不了官网&#xff0c;则可能要科学上网&#xff09; 访问Docker Desktop官方下载页 访问Docker官网 选择Windows及&#xff08;AMD64 也称为 x86-64&#xff0c;是目前主流 PC的…

【开题答辩全过程】以 “居逸”民宿预订微信小程序为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

LeetCode 2565.最少得分子序列

给你两个字符串 s 和 t 。 你可以从字符串 t 中删除任意数目的字符。 如果没有从字符串 t 中删除字符&#xff0c;那么得分为 0 &#xff0c;否则&#xff1a; 令 left 为删除字符中的最小下标。 令 right 为删除字符中的最大下标。 字符串的得分为 right - left 1 。 请你返回…

【文献笔记】PointWeb

参考笔记: https://blog.csdn.net/m0_69412369/article/details/143106494 https://www.cnblogs.com/A-FM/p/PointWeb.html 注:本文的大部分内容是转载而来 CVPR 2019:PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing 论文:https://ieeex…

用工招聘小程序:功能版块与前端设计解析

在当下就业市场日益活跃的背景下&#xff0c;用工招聘小程序应运而生&#xff0c;它以高效、便捷的特点&#xff0c;为求职者与企业搭建起一座沟通的桥梁。本文将深入分析这类小程序的核心功能版块及其前端设计&#xff0c;探讨其如何优化招聘流程&#xff0c;提升用户体验。用…

uTools 轻工具 简洁又方便

uTools 是一款跨平台轻工具平台&#xff0c;通过插件化设计提供高效工作方式&#xff0c;支持 Windows、MacOS、Linux 系统。 ‌ 核心功能 ‌超级搜索框‌&#xff1a;支持快捷键&#xff08;默认 AltSpace&#xff09;呼出&#xff0c;可搜索文件、网页、应用等。 ‌‌本地文…

图技术重塑金融未来:悦数图数据库如何驱动行业创新与风控变革

随着大数据的广泛应用和云计算的快速发展&#xff0c;金融行业的数据已经从“大”转向了“海”&#xff0c;从而对传统的数据处理、分析、挖掘等的方法和工具提出了更高的要求&#xff0c;也为金融领域的数据的海量的关联分析、实时的风控和复杂的决策支持等带来了一系列的挑战…

openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式

华为文档创建虚拟机步骤 配置bios支持虚拟化 2、检查系统是否支持虚拟化 3、安装虚拟化相关组件,并启动 yum install -y qemu virt-install virt-manager libvirt-daemon-qemu edk2-aarch64.noarch virt-viewer systemctl start libvirtd systemctl enable libvirtd4、创建…

Sentinel:微服务架构下的高可用流量防卫兵

一、引言&#xff1a;为什么需要Sentinel&#xff1f; 在分布式系统架构中&#xff0c;随着业务复杂度的提升和微服务架构的普及&#xff0c;服务之间的依赖关系变得越来越复杂。一个服务的不可用或异常可能会在整个系统中产生连锁反应&#xff0c;导致整个系统崩溃。这就是所…

详解 new 和 delete

目录 一、简要描述两者的作用 二、实例解析 1. 浅层区别 2. 深层区别 三、拓展&#xff08;operator new 的妙用&#xff09; 一、简要描述两者的作用 new : 是c推崇的 内存申请 方式&#xff0c;拥有比 malloc 更先进的机制 delete :是 对应的 内存释放方式&#xff0c;…

fMoE论文阅读笔记

原文链接&#xff1a;https://arxiv.org/pdf/2502.05370v1 在混合专家&#xff08;MoE&#xff09;架构中&#xff0c;初始阶段涉及输入样本通过GateNet进行多分类的鉴别过程&#xff0c;目的是确定最适合处理输入的专家模型。这个步骤被称为“experts selection”&#xff0c;…

Linux 禅道开源版安装

1、下载安装包安装wget https://www.zentao.net/dl/zentao/18.5/ZenTaoPMS.18.5.zbox_64.tar.gz tar zxf ZenTaoPMS.18.5.zbox_64.tar.gz/opt/zbox/zbox -ap 81 -mp 3307 # 指定apache服务端口 、 mysql服务端口 /opt/zbox/zbox start #启动禅道服务( 其他命令 /opt/zbox/…

PySpark基础知识(python)

PySpark 是 Apache Spark 的 Python API&#xff0c;它允许开发者使用 Python 语言编写 Spark 应用程序&#xff0c;结合了 Python 的易用性和 Spark 的分布式计算能力&#xff0c;是处理大规模数据的强大工具。 一、安装与环境配置 安装方式&#xff1a; 通过 pip 安装&#…

基于python大数据的电影数据分析可视化系统设计与应用

标题:基于python大数据的电影数据分析可视化系统设计与应用内容:1.摘要 本研究旨在设计并实现一个基于Python的大数据电影数据分析与可视化系统&#xff0c;以解决当前电影行业数据分散、分析效率低及可视化能力不足的问题。系统采用Python语言结合Pandas、NumPy进行数据清洗与…

【PyTorch】图像多分类

多类图像分类的目标是为一组固定类别中的图像分配标签。目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训练 用预训练权重进行训练 加载和处理数据 将使用 PyTorch torchvision 包中提供的 STL-10 数据集&#xff0c;数据集中有…

计算机视觉----opencv实战----指纹识别的案例

一、数据准备src2.BMPsrc1.BMPsrc.bmpmodel.BMP二、识别原理讲解&#xff08;sift特征提取&#xff09;SIFT&#xff08;Scale-Invariant Feature Transform&#xff0c;尺度不变特征变换&#xff09;是一种经典的图像特征提取算法&#xff0c;核心优势是不受图像尺度缩放、旋转…

npm 发布流程——从创建组件到发布到 npm 仓库

1. 准备组件 1.1 创建一个 Vue 组件 假设我们要创建一个简单的按钮组件&#xff1a; src/MyButton.vue <template><button class"my-btn" click"$emit(click)"><slot /></button> </template><script setup lang"ts…

MySQL入门基础指南

目录 一、什么是数据库&#xff1f; 仅依靠文件存储数据存在以下几个明显缺点&#xff1a; 数据库的存储介质通常包括&#xff1a; 二、主流数据库介绍 三、客户端 VS 服务器 四、推荐看的MySQL安装技术博客 五、数据库的存储介质 数据库的存储介质主要分为以下两类&am…

【实战中提升自己完结篇】分支篇之分支之无线、内网安全与QOS部署(完结)

1 1拓扑 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil1 分支无线部署 说明&#xff1a;分支无线用瘦AP部署&#xff0c;通过VPN直接注册到总部的AC上面&#xff0c;实现无线的业务提供&…

带你了解STM32:GPIO通用输入输出口

目录 3.1 GPIO简介 3.2 GPIO基本结构 3.3 GPIO位结构 输入部分&#xff1a; 二极管的保护作用&#xff1a; 施密特触发器&#xff1a; 片上外设端口 输出部分&#xff1a; MOS管 3.4 GPIO模式 3.4.1 浮空/上拉/下拉输入 3.4.2 模拟输入 3.4.3 开漏/推挽输出 3.4.…