今天的学习,将带领小伙伴们,无探寻java web中的监听器。
web监听器监听对象
web监听器
servlet规范中的一个特殊类。可以用来监听ServletContext、HttpSession、ServletRequest等域对象的创建与销毁事件。用来监听域对象属性的发生的修改事件。可以在事件前和事件后做处理。
web监听器用途
统计在线用户和在线人数系统启动时加载初始化信息统计访问网站
如何创建web监听器
首先先建一个类实现Listener,实现接口的方法在web.xml文件中配置Listener
就会在web.xml对应添加
监听器启动顺序
多个监听器启动顺序按监听器的注册顺序来的。
监听器分类
按监听对象分
用于监听应用程序环境对象(ServletContext)用于监听用户会话对象(HttpSession)用于监听请求消息对象(HttpRequest)
按监听的事件分
监听域对象自身的创建和销毁的事件监听。监听域对象中的属性的增加和删除的事件监听。监听绑定到HttpSession域中的某个对象的状态事件监听。
讲解监听器监听域对象自身的创建和销毁三种对象的情况
ServletContext实现ServletContextListener。该监听器主要完成定时器和定义全局变量作用。
public class Firstlistener implements ServletContextListener {
/*
* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
* 该方法在ServletContext创建的时候调用
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
* 该方法在ServletContext销毁的时候调用
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
String value = sce.getServletContext().getInitParameter("liu");//获取全局初始化参数,配置参数在web.xml。也可以通过setInitParameter设置值。
System.out.println(value);
}
}
<context-param>
<param-name>liu</param-name>
<param-value>jin</param-value>
</context-param>
2.HttpSession实现了HttpSessionListener接口,主要实现了统计在线人数和记录访问日志。
public class Secondlistener implements HttpSessionListener{
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
* session创建的时候就调用这个方法
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
* session销毁的时候就会调用这个方法
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
}
3.ServletRequest实现了ServletRequestListener接口,主要的作用就是读取参数和记录访问历史。
public class Threelistener implements ServletRequestListener{
/*
* (non-Javadoc)
* @see javax.servlet.ServletRequestListener#requestDestroyed(javax.servlet.ServletRequestEvent)
* 该方法在请求结束后调用
*/
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
* @see javax.servlet.ServletRequestListener#requestInitialized(javax.servlet.ServletRequestEvent)
* 该方法在请求开始调用
*/
@Override
public void requestInitialized(ServletRequestEvent sre) {
// TODO Auto-generated method stub
ing value = sre.getServletRequest().getParameter("name");//获取请求的参数值
}
}
1.ServletContext
public class ContextAttributeListner implements ServletContextAttributeListener {
/*
* (non-Javadoc)
* @see javax.servlet.ServletContextAttributeListener#attributeAdded(javax.servlet.ServletContextAttributeEvent)
* 该方法在属性增加的调用
*/
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("ServletContextAttributeEvent"+event.getName());
}
/*
* (non-Javadoc)
* @see javax.servlet.ServletContextAttributeListener#attributeRemoved(javax.servlet.ServletContextAttributeEvent)
* 该方法在属性删除时调用
*/
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("ServletContextAttributeEvent"+event.getName());
}
/*
* (non-Javadoc)
* @see javax.servlet.ServletContextAttributeListener#attributeReplaced(javax.servlet.ServletContextAttributeEvent)
* 该方法在属性替换时调用
*/
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("ServletContextAttributeEvent"+event.getName());
}
}
2. HttpSeesion
public class SessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("HttpSessionBindingEvent"+event.getName());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("HttpSessionBindingEvent"+event.getName());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("HttpSessionBindingEvent"+event.getName());
}
}
3. ServletRequest
public class RequestAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("ServletContextAttributeEvent"+event.getName());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub\
System.out.println("ServletContextAttributeEvent"+event.getName());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("ServletContextAttributeEvent"+event.getName());
}
}
如何操作三种对象的属性变化
<%
request.setAttribute("requestname", "request");
request.removeAttribute("requestname");
request.getSession().setAttribute("sessionname", "session");
request.getSession().removeAttribute("sessionname");
request.getSession().getServletContext().setAttribute("contextname", "coontext");
request.getSession().getServletContext().getAttribute("contextname");
%>
首先解释什么是绑定就是通过HttpSeesion.setattribute(),解除绑定就是HttpSession.getattribute()。
监听HttpSession的对象状态变化
public class User implements HttpSessionBindingListener,HttpSessionActivationListener {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
* 该方法用于绑定对象调用
*/
@Override
public void valueBound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
* 该方法用于解绑对象调用
*/
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
}
/*
* 该方法用于session的活化
*/
@Override
public void sessionDidActivate(HttpSessionEvent se) {//如果要实现活化,该类还得实现Serializable
// TODO Auto-generated method stub
}
/*
* 该方法用于session的钝化
*/
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
}
request.getSession().setAttribute("sessionobject",new User());
request.getSession().removeAttribute("sessionobject");
Servlet3.0下的监听器使用
Servlet3.0下监听器的代码
@WebListener("this is my listner")
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
}
和之前监听器不同的是,Servlet3.0使用了注解,就无需在web.xml配置。
转载请注明原文地址: https://ju.6miu.com/read-667617.html