三大域监听器的使用

本文详细介绍了在Servlet环境中,如何使用ServletContextListener监听ServletContext的创建和销毁,以及何时创建和销毁HttpSession对象。同时讨论了ServletRequestListener的作用,即监听ServletRequest对象从创建到销毁的整个过程。对于每个监听器,都提供了具体的实现步骤和示例。

ServletContextListener监听器的使用



使用
ServletContextListener监听器监听ServletContext的创建和销毁的实现思路是怎样的?

1、创建监听器类实现ServletContextListener接口,重新接口的所有方法。

package com.web.demo02;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
 * 
 * @author 坏坏实现小目标
 *	
 *	ServletContextListenerTest监听器
 *事件源:ServletContext
 *监听器:ServletContextListenerTest
 *事件源和监听器绑定:监听的是创建和销毁,通过配置来创建
 *
 */
public class ServletContextListenerTest implements ServletContextListener{

	@Override
	//监听ServletContext对象的创建
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("服务器启动了");
		
		sce.getServletContext().setAttribute("count1",0);
		
	}
	
	
	//监听ServletContext对象的销毁
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("服务器销毁了");
	}

}



2、将事件源和监听器进行绑定。(在web.xml中配置监听器就行了)

  <listener>
  <listener-class>com.web.demo02.HttpAtttibteListenerTest</listener-class>
  </listener>
  



HttpSession对象在什么时候创建和销毁?

分别访问htmljspServlet是否会创建HttpSession对象?

1、HttpSession对象的创建和销毁:

a)      创建:在服务器端第一次调用getSession()方法是创建

b)     销毁:①、非正常关闭服务器时销毁session(正常关闭服务器,session会被序列化到硬盘);②、session过期;③、手动调用HttpSession的方法销毁session。

2、访问html:不会创建HttpSession对象;访问jsp:会创建HttpSession对象(HttpSession对象时jsp的内置对象,jsp在被翻译成Servlet时调用了getSession()方法);访问Servlet:默认不会创建HttpSession对象。



ServletRequestListener监听器的使用

ServletRequest对象在什么时候创建和销毁?

ServletRequestListener作用是:监听ServletRequest对象的创建和销毁;

ServletRequest创建时机:当客户端向服务器发送一次请求时创建

ServletRequest销毁时机:服务器对客户端作出相应之后销毁。






### Web开发中的三大概念和作用 在Web开发中,三大是指`Request`、`Session`以及`Application`。这些用于管理不同范围内的数据共享问题。 #### 1. Request `Request`对应的是`HttpServletRequest`对象,它的生命周期仅限于单次HTTP请求[^2]。当客户端发起一个请求时,服务器会创建一个新的`Request`对象来处理该请求。在这个过程中,可以通过调用`setAttribute(String name, Object value)`方法将数据存入`Request`,并通过`getAttribute(String name)`获取对应的值。需要注意的是,一旦响应返回给客户端,`Request`对象及其关联的数据都会被销毁。因此,这种适合在同一请求的不同组件间传递临时数据。 #### 2. Session `Session`由`HttpSession`对象表示,其生命周期覆盖了一次完整的用户会话过程[^3]。具体来说,从用户的第一次访问开始直到浏览器关闭为止构成了一次会话。在此期间,即使有多个独立的请求发出,只要它们属于同一会话,则都可以访问相同的`Session`实例。利用这一特性可以在跨页面或多步操作场景下保持状态信息不变。例如登录验证后的用户名等敏感资料就可以保存在这里以便后续使用。同样支持设置属性并通过相应API读取或移除指定项。 #### 3. Application 最后提到的是`Application`, 它实际上就是指代整个应用程序级别的上下文环境即`ServletContext`对象[^4]。此的存在时间最长——自应用部署至容器启动之时起直至停止运行才会消失。由于它是全局唯一的资源池子集之一,故非常适合用来存放那些在整个项目周期内都需要维持一致性的配置选项或者是其他静态性质的内容比如数据库连接字符串等等。另外还可以借助初始化参数机制(web.xml文件定义)预先设定好一些固定的常量供各处引用[^5]。 ```python # 示例代码展示如何操作各个 def handle_request(request, session, application): # 设置并获取Request中的值 request.setAttribute("key", "request_value") req_val = request.getAttribute("key") # 设置并获取Session中的值 if not session.isNew(): session.setAttribute("user_name", "JohnDoe") sess_val = session.getAttribute("user_name") # 设置并获取Application中的值 application.setAttribute("app_key", "global_data") app_val = application.getAttribute("app_key") return f"Req Value:{req_val}, Sess User:{sess_val}, App Data:{app_val}" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值