web基础开发(四)

    xiaoxiao2021-04-12  35

    今天的学习,将带领小伙伴们,无探寻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

    最新回复(0)