监听实际上指的是对整个Web中需要的位置上的操作进行的一种监听而已,当发生了某些操作之中会自动的执行一些处理功能。那么怎么进行监听呢?
在监听器里面实际上主要都是针对于属性的监听(request、session、application)。
对application监听:
Application对应的类型是:javax.servlet.ServletContext,指的是整个整个servlet的上下文,即:服务器的监听。对于服务器的监听,提供有两个使用的接口,分别为:
一、对上下文的状态监听:ServletContextListener;
它又有两个操作,分别为:
初始化:public void contextInitialized(ServletContextEvent sce)
;
销毁: public void contextDestroyed(ServletContextEvent sce);
它们的方法里面都有一个事件的对象:ServletContextEvent,这个类里提供了如下操作:
取得上下文对象:public ServletContext getServletContext();
例:配置一个简单的监听:
package com.lj.zx;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
//ServletContextListener 表示针对整个容器的启动与关闭监听
public class MyListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("销毁----" +arg0.getServletContext().getRealPath("/"));
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("启动+++++" +arg0.getServletContext().getRealPath("/"));
}
}
并在web配置,代码十分简单,如下:
<listener>
<listener-class>com.lj.zx.MyListener</listener-class>
</listener>
将项目部署到tomact中,结果如下:
二、对上下文的属性监听:ServletContextAttributeListener:
1.增加属性:public void attributeAdded(ServletContextAttributeEvent scab);
2.替换属性:public void attributeReplaced(ServletContextAttributeEvent scab);
3.删除属性:public void attributeRemoved(ServletContextAttributeEvent scab);
这三个方法都会有一个事件对象:ServletContextAttributeEvent,这个类有如下方法:
① 取得操作属性的名字:public String getName();
② 取得操作属性的内容:public Object getValue();
为了让监听器起作用,在jsp或者Servlet页面进行属性的设置与删除,例:
package com.lj.zx;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextAttributeEvent;
public class MyListener implements ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("增加属性 name=" +arg0.getName() + ",value= "+arg0.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("删除属性 name=" +arg0.getName() + ",value= "+arg0.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("替换属性 name=" +arg0.getName() + ",value= "+arg0.getValue());
}
}
为了让监听器起作用,Jsp页面的简单代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
application.setAttribute("msg", new java.util.Date());
%>
部署该项目,启动,在浏览器上打开,结果如下:
再次刷新页面,则出现替换属性,结果如下:
更改jsp页面代码为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
application.removeAttribute("msg");
%>
出现删除属性,如下: