JavaWeb_Servlet监听器小结
Servlet监听器小结
- 1.监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
- 2.监听器的分类:
1)监听域对象(HttpSession,request,application)自身的创建和销毁的事件监听器。
2)监听域对象中的属性的增加和删除的事件监听器。
3)监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。 - 3.如何编写监听器:
1)编写实现监听器接口的 Java 类。
public class HelloServletContextListener implements ServletContextListener
.
2)对于第一种和第二种监听器需要在 web.xml 文件中进行注册:
<listener>
<listener-class>com.xs.javaweb.test.HelloServletContextListener</listener-class>
</listener>
- 4.监听域对象(HttpSession,request,application)自身的创建和销毁的事件监听器。
1)ServletContextListener:最常用的 Listener,可以在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:创建数据库连接池,创建 Spring 的 IOC 容器,读取当前 WEB 应用的初始化参数。
2)ServletRequestListener
3)HttpSessionListener
4)在每一个监听器中都有两个方法:
> 在域对象创前后立即被调用的方法:
> 在域对象销毁前被调用的方法:
5)方法的参数:以 ServletContextEvent 为例,该对象可以返回 ServletContext 对象。 - 5.监听 ServletContext,HttpSession,ServletRequest 中添加属性。替换属性。移除属性的事件监听器。(了解即可)
1)以 ServletRequestAttributeListener 为例:
//添加属性时被调用
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("向 request 中添加了一个属性...");
}
//移除属性时被调用
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("从 request 中移除了一个属性...");
}
//替换属性时被调用.
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request 中属性替换了...");
}
.
2)这三个 ServletContextAttributeListener,ServletRequestAttributeListener,HttpSessionAttributeListener 监听器较少被使用。
3)API:ServletRequestAttributeEvent:
> getName():获取属性的名字。
> getValue():获取属性的值。
- 6.监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。
1)HttpSessionBindingListener(了解即可):
①监听实现了该接口的 Java 类的对象被绑定到 session 或从 session 中解除绑定的事件。
//当前对象被绑定到 session 时调用该方法
public void valueBound(HttpSessionBindingEvent event)
//当前对象从 session 中解除绑定调用该方法
public void valueUnbound(HttpSessionBindingEvent event)
.
②注意:该监听器不需要在 web.xml 文件中进行配置。
③HttpSessionBindingEvent:
> getName():获取属性的名字。
> getValue():获取属性的值。
> getSession():获取session对象。
2)HttpSessionActivationListener(该监听器较少被使用):
①监听实现了该接口和 Serializable 接口(若不实现该接口,则只能写到磁盘上,但不能读取出来)的 Java 类的对象随 session 钝化和活化事件。
> 活化:从磁盘中读取 session 对象
> 钝化:向磁盘中写入 session 对象
> session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER
②该监听器不需要在 web.xml 文件中进行配置。
③
//在活化之后被调用.
public void sessionDidActivate(HttpSessionEvent se)
//在钝化之前被调用
public void sessionWillPassivate(HttpSessionEvent se)
HttpSessionEvent:getSession()
- 7.统计在线访客,可以把访客踢出其所在的 Session。
1)利用 HttpSessionListener 可以知道是否有用户访问当前的 WEB 应用。若 public void sessionCreated(HttpSessionEvent se) 被调用,说明有新访客到来;public void sessionDestroyed(HttpSessionEvent se) 被调用,说明访客离开。
2)可以使用一个 JSP 页面显示当前的访客:
访客共有 xx 人,其中匿名访客 xx 人,注册用户 xx 人。
访客IP: 操作
192.168.3.12(匿名用户) 踢出
192.168.3.14 踢出
192.168.3.16 踢出
老虎的牙(登录客户) 踢出
192.168.8.12 踢出
战死的鹰 踢出
192.168.3.18 踢出
踢出效果为:若正在访问一个必须登录的页面,在点击刷新,发现该页面无法访问,而需要先登录。
3)踢出操作:即让其 Session 失效。