JavaWeb监听器(实现监听器步骤,域对象的创建和销毁,域对象的属性变更)

版权声明:《==study hard and make progress every day==》 https://blog.csdn.net/qq_38225558/article/details/83053476

在WEB中监听器的监听对象也就是针对域对象【application/session/request/pageContext(不用)】的创建、销毁以及域对象属性对象的添加、移除。

监听三个域对象的创建和销毁的监听器        ( 类型名Listener)

ServletContextListener
HttpSessionListener
ServletRequestListener

监听三个域对象的属性变更的监听器(属性添加,修改,移除)       (类型名AttributeListener)

ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener

实现监听器步骤

①自定义类实现对应的监听器接口

public class MyListener implements ServletRequestListener,HttpSessionListener,ServletContextListener,HttpSessionAttributeListener {
	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("===ServletRequest:创建...===");
	}
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		System.out.println("===ServletRequest:销毁...===");
	}
//	=================================================================
	@Override
	public void sessionCreated(HttpSessionEvent hse) {
		System.out.println("===HttpSession:创建...===");
	}
	@Override
	public void sessionDestroyed(HttpSessionEvent hse) {
		System.out.println("===HttpSession:销毁...===");
	}
//	=================================================================	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("===ServletContext:创建...===");
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("===ServletContext:销毁...===");
	}
//	=================================================================
	@Override
	public void attributeAdded(HttpSessionBindingEvent hsbe) {
		System.out.println("===添加属性===");//session存值
	}
	@Override
	public void attributeReplaced(HttpSessionBindingEvent hsbe) {
	 	System.out.println("===修改、覆盖属性===");
	}
	@Override
	public void attributeRemoved(HttpSessionBindingEvent hsbe) {
		System.out.println("===移除属性===");
	}
}

②在web.xml中配置监听器

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0" metadata-complete="false">
  
	<listener>
		<listener-class>com.zhengqing.listener.MyListener</listener-class>
	</listener>

</web-app>

分别访问jsp、html、servlet,对应的三个域对象是否会创建??

 

request【请求对象】

session【getSession】

servletContext【服务器启动时】

jsp

会【当前用户首次访问】

不会

html

不会

不会

servlet

不会【当首次访问,而且存在getSession,就会创建】

不会


                                                                     监听域对象的创建和销毁

ServletRequest
  创建:客户端向服务器发送一次请求,服务器就会创建request对象.
  销毁:服务器对这次请求作出响应后就会销毁request对象.

HttpSession
  创建:  服务器端第一次调用getSession()
  销毁:    ①非正常关闭服务器(正常关闭session会序列化)
              ②session过期了默认30分钟
              ③手动调用 session.invalidate();

ServletContext
  创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext
  销毁:服务器关闭或者项目从服务器中移除的时候

                                                                       

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/83053476