JavaWeb(四)Listener && Filter

JavaWeb中的Filter过滤器和Listener监听器 观察者模式是二十三中设计模式之一,它是指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式观察者:监控『被观察者』的行为,一旦发现『被观察者』触发了事件,就会调用事先准备好的方法执行操作。被观察者:『被观察者』一旦触发了被监控的事件,就会被『观察者』发现。监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。Servlet监听器。 阅读详情

1.Listener

1.1Servlet的监听器
总共有8个,分为3种类型:
1.1.1.监听三个作用域的创建和销毁【常用】
1.ServletContextListener

利用它在ServletContext创建的时候,完成自己想要的初始化工作; 执行自定义的任务调度;

2.ServletRequestListener
3.HttpSessionListener

统计在线人数

使用方法:1.定义一个类,实现接口;

public class MyServletContextListener implements ServletContextListener {

	@Override//初始化
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("这是初始化状态..........");
	}

	@Override//销毁监听器
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("已销毁.............");

	}
}

2.配置监听器:web.xml里配置

 <listener>
    <listener-class>zheng.MyServletContextListener</listener-class>
 </listener>

1.1.2.监听三个作用域属性状态变更【了解】

可以监听在作用域中值的添加,替换,移除的动作【3个】

session监听器:
HttpSessionAttributeListener;
request监听器:
ServletRequestAttributeListener;
servletContext监听器:
ServletContextAtrributeListener;

三个的写法基本相同,session监听器做示例

1 页面

<body>
    <%
       session.setAttribute("name","lisi");
    /* 替换 */
       session.setAttribute("name", "aobama");
/*     移除 */
    session.removeAttribute("name");
    %>
</body>

2.MyHttpSession类实现session监听器的接口HttpSessionAttributeListener

public class MyHttpSession implements HttpSessionAttributeListener {

	@Override
	public void attributeAdded(HttpSessionBindingEvent arg0) {
		System.out.println("属性被添加");
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		System.out.println("属性被移除");
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		System.out.println("属性被替代");
	}
}

3.web.xml里配置

 <listener>
    <listener-class>zheng.MyHttpSession</listener-class>
 </listener>

4.浏览器访问页面
http://localhost:8077/ListenerDemo/demo1/demo1.jsp
对应的控制台监听

属性被添加
属性被替代
属性被移除

1.1.3.监听HttpSession里的存值状态变更;

这类监听器不需要注册【2个】

HttpSessionBindingListener【了解】
用于监听对象与session绑定和解除绑定
1.让javaBean实现该接口

public class Bean implements HttpSessionBindingListener {
	private String name;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Bean(String name) {
		super();
		this.name = name;
	}
	public Bean() {
		super();
	}
	@Override
	public String toString() {
		return "Bean [name=" + name + "]";
	}
	@Override
	public void valueBound(HttpSessionBindingEvent arg0) {
		System.out.println("值被绑定");
	}
	@Override
	public void valueUnbound(HttpSessionBindingEvent arg0) {
		System.out.println("解除绑定");
	}
}

2.jsp

<%
         Bean bean = new Bean();
		 bean.setName("lisi");
		    
		 session.setAttribute("bean", bean);
		 session.removeAttribute("bean");
    %>

访问页面控制台会监听到javaBean里的数据

HttpSesssionActivationListener

用于监听现在session的值是钝化还是活化
钝化(序列化):把内存数据存储到硬盘上;
活化(反序列化):把硬盘数据存储到内存中;

Filter

模拟自动登陆案例实现
1.分析
在这里插入图片描述
前期准备:准备好必要的jar文件;创建好数据库,c3p0连接数据库,JDBCUtil连接对象;
第一步:创建login.jsp登陆页面

<body>
    <form action="LoginServlet" method="post">
                账号:<input type="text" name="username"><br>
               密码:<input type="password" name="password"><br>
      <input type="checkbox" name="autologin">自动登陆<br>
      <input type="submit" value="登陆">
    </form>
</body>

第二步:创建LoginServlet收jsp页面传来的数据;

public class LoginServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			request.setCharacterEncoding("UTF-8");
			
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			String autologin = request.getParameter("autologin");
			System.out.println("username:"+username+"===="+"&&password:"+password+"=="+autologin);
			//将用户信息封装到user,然后传给login方法
			UserBean user = new UserBean();
			user.setUsername(username);
			user.setPassword(password);
			
			UserDao dao = new UserDaoImpl();
			UserBean userBean = dao.login(user);
			
			System.out.println("userBean======="+userBean);
			//判断是否登陆成功
			if(userBean != null){//登陆成功:跳转新页面
				//页面提交是否勾选了自动登陆
				if("on".equals(autologin)){
					//发送cookie给客户端
					Cookie cookie = new Cookie("auto_login", username+"==="+password);
					cookie.setMaxAge(60*60*24*7);//7天
					cookie.setPath(request.getContextPath());//那个网站
					response.addCookie(cookie);
				}
				//存值:用于succes.jsp页面获取该数据
				request.getSession().setAttribute("userBean", userBean);
				response.sendRedirect("success.jsp");
			}else{
				request.getRequestDispatcher("login.jsp").forward(request, response);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

第三步:domain层创建UserBean用户类

public class UserBean {
	private int id;
	private String username;
	private String password;
	public UserBean() {
		super();
	}
	public UserBean(int id, String username, String password) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserBean [id=" + id + ", username=" + username + ", password="
						+ password + "]";
	}
}

第四步:创建dao层UserDao及其实现类

/**
 * @author Leonard
 *	执行登陆并且返回该用户所有信息
 *
 *	user:执行登陆的用户数量	 ;封装成一个对象 
 */
public interface UserDao {
	
	UserBean login(UserBean user) throws SQLException;
}
public class UserDaoImpl implements UserDao {

	@Override
	public UserBean login(UserBean user) throws SQLException {
		QueryRunner runner = new QueryRunner(JDBCUtil.getDataSource());
		String sql = "select * from t_user where username=? and password=?";
		UserBean query = runner.query(sql, new BeanHandler<UserBean>(UserBean.class), user.getUsername(),user.getPassword());
		return query;
	}

}
JavaWeb——监听器Listener & 过滤器Filter——韩顺平学习笔记 阅读详情

相关推荐

servlet+filter+listener 详解

详细的解释了servlet filter listener 额知识,本文档适合初学者阅读

JavaWeb三大组件【Servlet】【Filter】【Listener】学习笔记

本文主要详细讲解JavaWeb的三大组件:Servlet、Filter、Listener。内容包括三者的基本语法、用法,同时包含一个三者的综合案例,同时案例富有详细的解说

热爱编程、热爱生活、热爱探索 3181

C#读取CAD文件(dwg/dxf)并处理

项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;

三千幻想乡 1万+

Servlet、Filter、Listener

1 过滤器 1.1 过滤器概述 1.1.1 什么是过滤器? Servlet技术规范中,定义了Servlet、Filter、Listener三门技术, 其中Filter也叫做过滤器,通过过滤器技术,开发人员可以实现用户在访问某个资源之前或之后,对访问的请求和响应进行拦截,从而做一些相关的处理。 总结: 1.所谓的过滤器,就是拦截用户对资源的访问 2.一个过滤器可以拦截多个资源,一个资源也可...

weixin_43470574的博客 450

关键词‖旋变传感器

旋转变压器(以下简称旋变)安装在永磁同步驱动电机的非传动端,其作用是检测转子的位置和速度。目前,通常采采用结构简单、坚固耐用、环境适应性好的磁阻式旋变作为位置传感器。

m0_72345077的博客 2154

drm 之modes

#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&...

u012794472的专栏 3721

一文快速回顾 Servlet、Filter、Listener

前置知识Web 服务器:可以指硬件上的,也可以指软件上的。从硬件的角度来说, Web 服务器指的就是一台存储了网络服务软件的计算机;从软件的角度来说, Web 服务器指的是一种软件,比如 Tomcat。Servlet 容器:目前主流的 Servlet 容器软件包括 Tomcat、Jetty、Jboss 等。Web 服务器 ≠ Servlet 容器,Tomcat 是一种 Web 服务器,同时它还是一个 Servlet 容器。

god23bin的博客之地 557

COMSOL实战:如何用有限元法(FEM)准确仿真电磁场问题?避坑指南

本文是一份COMSOL电磁场仿真实战指南,重点讲解如何运用有限元法(FEM)准确模拟电磁场问题。文章通过矩形波导和偶极子天线两大经典案例,详细剖析了从几何建模、物理场设置、网格剖分到结果验证的全流程,并提供了处理非线性材料、求解器收敛失败等高级问题的避坑技巧,旨在帮助工程师建立可靠的仿真工作流。

weixin_29297127的博客 514

Filter与Listener(过滤器与监听器)

Filter 是一个接口,如果想实现过滤器的功能,必须实现该接口核心方法返回值方法名作用void初始化方法void对请求资源和响应资源过滤voiddestory()销毁方法配置方式注解方式配置文件观察者设计模式,所有的监听器都是基于观察者设计模式的三个组成部分事件源:触发事件的对象。事件:触发的动作,里面封装了事件源。监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。在程序当中,我们可以对:对象的创建销毁、域对象中属性的变化、会话相关内容进行监听。

weixin_61611746的博客 1077

微磁模拟实战指南:从OOMMF安装到首个3D模型运行

本文详细介绍了OOMMF微磁模拟软件的安装与使用,从环境配置到首个3D模型运行的完整教程。涵盖Windows、Linux和macOS平台的安装避坑指南,以及MIF文件编写、并行计算优化等实战技巧,帮助研究人员快速掌握这一开源工具在磁畴壁运动、磁滞回线等微磁学问题中的应用。

weixin_29294597的博客 153

GB9706.1-2020应用部分如何理解?

医用电气设备对应用部分的温度限制,绝缘考核,漏电流限制要求相对设备的其他部分来说都会要求比较严格。所以,划分设备的应用部分显得非常重要。现实中,医疗器械种类繁多,形状各异,比如大家熟悉的,小的如血压计,大的设备如CT。有些时候,我们应该如何根据应用部分的定义来确定ME设备的哪些部分是应用部分呢?还有GB 9706.1-2020中关于“应用部分”的定义中注2我们又该如何理解? 看过GB 9706.1-2020的朋友应该都已经注意到,相比老版也就是07版的9706.1,应用部分的定义是相对变...

喵叫兽的博客 8299

JavaWeb三大组件(Servlet程序、Filter过滤器、Listener监听器)

概述Servlet (server applet) 是运行在服务端(tomcat)的Java小程序Servlet主要负责接收处理请求、协同调度功能以及响应数据Servlet是运行在服务端的,Servlet必须在WEB项目中开发且在Tomcat这样的服务容器中运行Servlet的请求和响应流程tomcat接收到请求后,会将请求报文的信息转换一个对象该对象中包含了请求中的所有信息(请求行、请求头、请求体)tomcat同时创建了一个对象,该对象用于承装要响应给客户端的信息。

从基础到源码解析的学习记录 2644

PTC Creo软件二次开发:使用C++进行Creo二次开发实战

C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。由Bjarne Stroustrup在贝尔实验室开发,最初作为C语言的增强版出现,后来发展成为一种独立的语言。C++不仅保留了C语言的高效性和灵活性,还引入了类、模板、命名空间等高级特性,使其成为开发复杂系统和软件的理想选择。

kkchenjj的博客 4047

JavaWeb之Filter和Listener

本文主要讲解JavaWeb三大组件之二,Filter和Listener。过滤器相当于浏览器与 Web 资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。监听器:用来监听 Servlet 容器产生的事件并进行相应的处理。

小小张自由—>张有博 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JavaWeb中的Filter(过滤器)和 Listener(监听器)

详细讲解的JavaWeb中如何使用Filter和Listener,以及两个技术的原理。

???? 2179

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JavaWeb08-Filter和Listener

Filter 表示过滤器,是JavaWeb 三大组件(Servlet、Filter、Listener)之一Listener 表示监听器,是JavaWeb 三大组件(Servlet、Filter、Listener)之一。

qq_33627452的博客 792

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JavaWeb之Filter、Listener

今天给大家讲解的是Filter和Listener的用法。 一、Listenner监听器 1.1、定义 Javaweb中的监听器是用于监听web常见对象HttpServletRequest,HttpSession,ServletContext。 1.2、监听器的作用 监听web对象创建与销毁. 监听web对象的属性变化 监听session绑定javaBean操作. 1.3、监听机制中的概念 事件----一件事情 事件源---产生这件事情的源头 注册监听---将监听器与事件绑定,当事件产生

qq_48793913的博客 727

JavaWeb三大组件(Servlet、Filter、Listener)

JavaWeb三大组件指的是:Servlet、Filter、Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet、Filter,比如我),很难接触到第三个组件,因此对原始JavaWeb开发还不够熟悉,在这种情况下进行框架学习,这种做法是并不可取,框架是大牛们对原始JavaWeb进行封装的结果,没有原始JavaWeb开发基础是很难真

xiaojie119120的博客 4万+

Filter,Listener

Override@Override@Override概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件Listener分类: JavaWeb中提供了8个监听器监听器分类监听器名称作用ServletContext监听用于对ServletContext对象进行监听(创建、销毁)

2301_80460489的博客 1135

JavaWeb三大组件【Servlet、Filter、Listener】

目录 引言 Filter Listener 引言 JavaWeb三大组件指的是:Servlet、Filter、Listener,这三个组件在JavaWeb开发中分别提供不同的功能。Servlet 是 JavaWeb 的三大组件之一,它属于动态资源,前面文章有写到(请参考):web阶段~Servlet学习_乔巴菌儿的博客-优快云博客 今天,我们将进行Filter(过滤器)与Listener(监听器)的学习。 Filter 【概念】 web中的过滤器:当访问服务器的资源时,过滤器可以将.

乔巴俊儿~~的博客 2674

JavaWeb基础8——Filter,Listener,Ajax,Axios,JSON

Filter过滤器、Listener监听器、AJAX、 同步、异步优点和使用场景、Axios异步框架、JSON、js和JSON转换、案例,Axios + JSON 品牌列表查询和添加

种一棵树最好的时间是十年前,其次是现在 4696

JavaWeb的三大组件 —— Servlet、Filter和Listener

JavaWeb的三大组件Servlet、Filter和Listener各自具有独特的功能和生命周期,它们共同构成了JavaWeb应用程序的基础架构。Servlet用于处理HTTP请求和响应,Filter用于在请求和响应之间执行通用操作,Listener用于监听Web应用程序中的事件。通过合理使用这三大组件,可以开发出功能丰富、性能优良的Web应用程序。

Q_Boom的博客 805

JavaWeb笔记(会话跟踪、Filter、Listener)

JavaWeb笔记(会话跟踪、Filter、Listener)

LLM | Agent | RAG | Java 1974

四、Javaweb之Filter、Listener、Ajax、Vue

四、Javaweb之Filter、Listener、Ajax、Vue

widsoor的博客 705
上一篇: JavaWeb(三)Ajax与JQuery
下一篇: 数据库之Linux下Redis的学习
一朝游
博客等级 码龄8年 0粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值