javaee之监听器

监听器:
不管是js还是swing,一个事件的监听包括3个部分,事件、事件源、监听器。
在web中的监听器中,一共有6个监听器,监听器用于去监听web的域对象,包括ServletContext、HttpServletRequest
、HttpSession这三个域对象。
监听器也是需要在服务器中运行,所以也需要在web.xml中配置去交给服务器管理

ServletContext:
ServletContextListener
作用:监听ServletContext对象的创建和销毁,在web应用加载或者服务器启动时创建,在web应用卸载或服务器停止时销毁


ServletContextAttributeListener
作用:对ServletContext对象里面的属性进行增删改功能


ServletRequest:
ServletRequestListener
作用:监听request对象的创建和销毁,在用户发出请求时创建,在请求完毕后销毁
ServletRequestAttributeListener
作用:对request对象里面的属性进行增删改功能


HttpSession:
HttpSessionListener
作用:监听session对象创建和销毁,在每个用户第一次调用request.getSession()方法时创建,销毁的方式有多种:默认等30分钟、设置等待的时间
setMaxInactiveInteval(xxx)、在全局配置上配置等待时间<session-config><session-timeout></session-config>、还有就是手动销毁invalidate()
HttpSessionAttributeListener

作用:对session对象里面的属性增删改操作


下面的几个实例来了解监听器

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 监听器的作用用于在域对象中的设置,包括对象的销毁和创建,还有域对象属性的增删改,
 * 三个域对象所以对应三个域对象的监听器,这里不包含pageContext域对象
 * ServletContext:servletContextListener 和 servletContextAttributeListener
 * ServletRequest:servletRequestListener 和 servletRequestAttributeListener
 * HttpSession:HttpSessionListener 和 HttpSessionAttributeListener
 * @author Mao
 *
 */
public class Listenerdemo1 implements ServletContextListener {

	/**
	 * ServletContextListener监听器适用于在web应用或者服务器启动时开始监听
	 */
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("销毁");
	}

	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("初始化");
	}

}
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

/**
 * 对ServletContext里面的属性进行操作
 * 通过三个方法,对context的属性实现增删改
 * @author Mao
 *
 */
public class Listenerdemo3 implements ServletContextAttributeListener {

	//增加属性
	public void attributeAdded(ServletContextAttributeEvent ser) {
		// TODO Auto-generated method stub
		String name = ser.getName();
		Object value = ser.getValue();
		System.out.println(name + value);
	}

	//删除属性
	public void attributeRemoved(ServletContextAttributeEvent ser) {
		// TODO Auto-generated method stub
		String name = ser.getName();
		Object value = ser.getValue();
		System.out.println(name + value);
	}

	//修改属性
	public void attributeReplaced(ServletContextAttributeEvent ser) {
		// TODO Auto-generated method stub
		String name = ser.getName();
		Object obj = ser.getValue(); //修改前的属性
		Object value = ser.getServletContext().getAttribute(name);//修改后的属性
		System.out.println(name + value);
	}

	
}

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

/**
 * ServletRequestListener监听器能够监听的是request域对象,当request发送请求时进行监听
 * @author Mao
 *
 */
public class Listenerdemo1 implements ServletRequestListener {

	public void requestDestroyed(ServletRequestEvent re) {
		// TODO Auto-generated method stub
		System.out.println("请求销毁");
	}

	public void requestInitialized(ServletRequestEvent re) {
		// 通过吧request转换成httpServletReqeust对象能够获得请求时的用户ip
		HttpServletRequest request = (HttpServletRequest) re.getServletRequest();
		String ip = request.getRemoteHost();
		request.setAttribute("ip", ip);
		
		System.out.println("请求创建");
	}

}

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

/**
 * ServletRequestAttributeListener这个监听器能够对request域对象里面的属性进行增删改的功能
 * @author Mao
 *
 */
public class Listenerdemo2 implements ServletRequestAttributeListener {

	//添加属性到request中
	public void attributeAdded(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object value = re.getValue();
		System.out.println(name + value);
	}

	//request中删除属性
	public void attributeRemoved(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object value = re.getValue();
		System.out.println(name + value);
	}

	//request修改属性
	public void attributeReplaced(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object val = re.getValue(); //得到的是修改前的属性
		
		Object value = re.getServletRequest().getAttribute(name); //得到的是修改后的属性
		System.out.println(name + value);
		
	}

}

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class Listenerdemo1 implements HttpSessionListener {

	//在session中创建时,也就是调用request.getsession()方法时
	public void sessionCreated(HttpSessionEvent re) {
		System.out.println("session创建");
	}

	//删除session的时候,即等session的时间过去之后,或直接手动删除session的时候,即session.invalidate()
	public void sessionDestroyed(HttpSessionEvent re) {
		System.out.println("session销毁");
	}

}

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

/**
 * ServletRequestAttributeListener这个监听器能够对request域对象里面的属性进行增删改的功能
 * @author Mao
 *
 */
public class Listenerdemo2 implements ServletRequestAttributeListener {

	//添加属性到request中
	public void attributeAdded(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object value = re.getValue();
		System.out.println(name + value);
	}

	//request中删除属性
	public void attributeRemoved(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object value = re.getValue();
		System.out.println(name + value);
	}

	//request修改属性
	public void attributeReplaced(ServletRequestAttributeEvent re) {
		String name = re.getName();
		Object val = re.getValue(); //得到的是修改前的属性
		
		Object value = re.getServletRequest().getAttribute(name); //得到的是修改后的属性
		System.out.println(name + value);
		
	}

}






不管是监听器还是过滤器,都是属于servlet的辅助工具类,以后学习到了框架,这些都是可以不用考虑的,框架已经写好了


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值