javaweb——监听器

1、application、request、session监听器

1、listener有三个

1、 ServletContextListener (监听application)
2、 ServletRequestListener (监听request)
3、 HttpSessionListener (监听session)

创建监听器必须实现这三个接口,需要监听哪个域就实现哪个

2、三个监听器各自需要实现两个方法

public class listenerTest implements ServletContextListener, ServletRequestListener, HttpSessionListener {

	// session
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		
	}
	
	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		
	}
	
	// request
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		
	}
	
	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		
	}
	
	// application/servletContext
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		
	}
	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		
	}

}

3、web.xml中配置监听器

<listener>
	<listener-class>org.hp.listener.listenerTest</listener-class>
</listener>

只配置监听器的全类名就行,其他标签可选

4、监听器执行顺序

程序执行创建application对象,首先响应的就是application监听器
用户对服务器发出请求,会触发request监听器,服务器接收到请求就会创建session对象,即触发session监听器

2、属性值监听器

1、属性值监听器同样有三个

1、ServletContextAttributeListener
2、ServletRequestAttributeListener
3、HttpSessionAttributeListener

同样需要实现接口中的所有方法,每个接口中有三个方法

2、实现接口(编写监听器

	// session
	@Override
	public void attributeAdded(HttpSessionBindingEvent se) {
		String name = se.getName();
		Object val = se.getSession().getAttribute(name);
		System.out.println("session监听器【创建】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent se) {
		String name = se.getName();
		Object val = se.getSession().getAttribute(name);
		System.out.println("session监听器【移除】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent se) {
		String name = se.getName();
		Object val = se.getSession().getAttribute(name);
		System.out.println("session监听器【替换】,属性名"+name+",属性值"+val);
	}
	
	// request
	@Override
	public void attributeAdded(ServletRequestAttributeEvent srae) {
		String name = srae.getName();
		Object val = srae.getServletRequest().getAttribute(name);
		System.out.println("request监听器【创建】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeRemoved(ServletRequestAttributeEvent srae) {
		String name = srae.getName();
		Object val = srae.getServletRequest().getAttribute(name);
		System.out.println("request监听器【移除】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeReplaced(ServletRequestAttributeEvent srae) {
		String name = srae.getName();
		Object val = srae.getServletRequest().getAttribute(name);
		System.out.println("request监听器【替换】,属性名"+name+",属性值"+val);
	}
	
	// application
	@Override
	public void attributeAdded(ServletContextAttributeEvent scab) {
		String name = scab.getName();
		Object val = scab.getServletContext().getAttribute(name);
		System.out.println("application监听器【创建】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeRemoved(ServletContextAttributeEvent scab) {
		String name = scab.getName();
		Object val = scab.getServletContext().getAttribute(name);
		System.out.println("application监听器【移除】,属性名"+name+",属性值"+val);
	}

	@Override
	public void attributeReplaced(ServletContextAttributeEvent scab) {
		String name = scab.getName();
		Object val = scab.getServletContext().getAttribute(name);
		System.out.println("application监听器【替换】,属性名"+name+",属性值"+val);
	}

3、配置web.xml

<listener>
	<listener-class>org.hp.listener.attributeListener</listener-class>
</listener>

和之前三个监听器一样

4、测试监听器(因为手懒前面三个没写)

首先创建一个新的jsp页面
并在页面中分别添加、替换、删除三个域中的三个属性和他们的值

<%
	application.setAttribute("app", "new app");//创建
	application.setAttribute("app", "old app");//替换
	application.removeAttribute("app");//移除
	
	request.setAttribute("req", "new req");//创建
	request.setAttribute("req", "old req");//替换
	request.removeAttribute("req");//移除
	
	session.setAttribute("session", "new session");//创建
	session.setAttribute("session", "old session");//替换
	session.removeAttribute("session");//移除
%>

5、观察结果

request监听器【替换】,属性名org.apache.catalina.ASYNC_SUPPORTED,属性值false
application监听器【创建】,属性名org.apache.jasper.runtime.JspApplicationContextImpl,属性值org.apache.jasper.runtime.JspApplicationContextImpl@b554b31
application监听器【创建】,属性名org.apache.jasper.compiler.ELInterpreter,属性值org.apache.jasper.compiler.ELInterpreterFactory$DefaultELInterpreter@45b8ef89
application监听器【创建】,属性名app,属性值new app
application监听器【替换】,属性名app,属性值old app
application监听器【移除】,属性名app,属性值null
request监听器【创建】,属性名req,属性值new req
request监听器【替换】,属性名req,属性值old req
request监听器【移除】,属性名req,属性值null
session监听器【创建】,属性名session,属性值new session
session监听器【替换】,属性名session,属性值old session
session监听器【移除】,属性名session,属性值null

可以看到第一行是访问该jsp时创建的reqeust对象
第二第三行则是tomcat自动创建的application对象
以下就是这次实验的三个自定义对象
分别打印出了创建、替换和移除时的属性名和属性值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值