监听器
概述
API
ServletContextListener
在Servlet上下文对象初始化或者销毁时得到通知,位于javax.servlet包下
常用方法:
contextInitialized(ServletContextEvent arg)
在Web应用程序初始化开始时由Web容器调用,该方法无返回值
contextDestory(ServletContextEvent arg)
当Servlet上下文将要关闭时由Web容器调用,该方法无返回值
ServletContextAttributeListener
在Servlet上下文中的属性列表发生变化时得到通知,位于javax.servlet包下
HttpSessionListener
在Session创建后或者失效前得到通知,位于javax.servlet.http包下
HttpSessionActivationListener
实现该接口的对象,如果绑定到Session中,当Session被钝化或者激活时,Servlet容器将通知该对象,位于javax.servlet.http包下
HttpSessionBindingListener接口
常用方法:
valueBound(HttpSessionBindingEvent event)
当对象被添加到Session时,由容器调用该方法来通知对象,该方法无返回值
valueUnbound(HttpSessionBindingEvent event)
当对象从Session中清除时,由容器调用该方法来通知对象,该方法无返回值
ServletContext监听
public class MyContextListener implements ServletContextListener, ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("属性添加");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("属性修改");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("属性删除");
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContext对象销毁时调用");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("ServletContext对象创建时调用");
}
}
<listener>
<listener-class>com.shuai.listeners.MyContextListener</listener-class>
</listener>
HttpServletRequest监听
public class MyRequestListener implements ServletRequestListener, ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent arg0) {
System.out.println("增加属性");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("删除属性");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("替换属性的值");
}
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("request销毁");
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("request创建");
}
}
<listener>
<listener-class>com.shuai.listeners.MyRequestListener</listener-class>
</listener>
HttpSession监听
public class MySessionListener implements HttpSessionListener, HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("新增属性");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("属性移除");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("修改属性");
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("session创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("session销毁");
}
}
<listener>
<listener-class>com.shuai.listeners.MySessionListener</listener-class>
</listener>
全局改变session回收时间
web.xml中配置
<session-config>
<session-timeout>1</session-timeout>
</session-config>
案例
显示当前登录的用户-并且可以踢出用户
HTTPSession属性监听器-当用户登录的时候把登录信息保存到session中
session监听到属性增加的时候,把用户信息保存到application中。
session监听到属性移除的时候,把用户信息从application中移除。
一个servlet专门用来做用户的显示
做一个请求过滤器做权限控制。
其它
访问者ip
request.getRemoteHost()
session创建时间
session.getCreationTime()
session最后访问时间
session.getLastAccessedTime()