本文代码转载自 《Servlet、JSP和Spring MVC初学指南》 及 http://www.111cn.net/jsp/50/3d5adc1119e253bc749e2d254b47f974.htm 对于一般的Listener下面是例子:先给出普通的context-listener request-listener session-listener的例子
package listener; /** * Created by admin on 2017/2/21. */ import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class AppListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent sce){ } @Override public void contextInitialized (ServletContextEvent sce){ ServletContext servletContext = sce.getServletContext(); Map<String, String> countries = new HashMap<>(); countries.put("ca", "Canada"); countries.put("us", "United States"); servletContext.setAttribute("countries", countries); } }
package listener; /** * Created by admin on 2017/2/21. */ import javax.servlet.ServletRequest; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpServletRequest; @WebListener public class PrefStatListener implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent sre){ ServletRequest servletRequest = sre.getServletRequest(); servletRequest.setAttribute("start", System.nanoTime()); } @Override public void requestDestroyed(ServletRequestEvent sre){ ServletRequest servletRequest = sre.getServletRequest(); Long start = (Long) servletRequest.getAttribute("start"); Long end = System.nanoTime(); HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String uri = httpServletRequest.getRequestURI(); System.out.println("time taken to execute " + uri + ":" + (end - start) / 1000 + "microseconds"); } }
package listener; /** * Created by admin on 2017/2/21. */ import java.util.concurrent.atomic.AtomicInteger; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContext; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent; @WebListener public class SessionListener implements HttpSessionListener, ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce){ ServletContext servletContext = sce.getServletContext(); servletContext.setAttribute("userCounter", new AtomicInteger()); } @Override public void contextDestroyed(ServletContextEvent sce){ } @Override public void sessionCreated(HttpSessionEvent se){ HttpSession session = se.getSession(); ServletContext servletContext = session.getServletContext(); AtomicInteger userCounter = (AtomicInteger) servletContext.getAttribute("userCounter"); int userCount = userCounter.incrementAndGet(); System.out.println("userCount incremented to: " + userCount); } @Override public void sessionDestroyed(HttpSessionEvent se){ HttpSession session = se.getSession(); ServletContext servletContext = session.getServletContext(); AtomicInteger userCounter = (AtomicInteger) servletContext.getAttribute("userCounter"); int userCount = userCounter.decrementAndGet(); System.out.println("---------- userCount decremented to :" + userCount); } }
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Country List</title> </head> <body> We operate in these countries: <ul> <c:forEach items="${countries}" var = "country"> <li>${country.value}</li> </c:forEach> </ul> </body> </html>
这里使用annotation WebListener进行listener声明,当然也可以在web.xml进行简单声明。 对于对session 相应attribute进行监听的情形,见下例 这是一个将不同表单用户名 绑定到一个容器上 并将用户名作为session绑定 对象的attribute的实例 定义的函数对于 attribute的创建及销毁进行监听 并进行有关个数的记录package pub; /** * Created by admin on 2017/2/21. */ import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import java.util.Vector; import java.util.Date; public class OnlineUser implements HttpSessionBindingListener { public OnlineUser(){ } private Vector users = new Vector(); public int getCount(){ users.trimToSize();; return users.capacity(); } public boolean existUser(String userName){ users.trimToSize(); boolean existUser = false; for(int i = 0;i < users.capacity(); i++){ if(userName.equals((String)users.get(i))){ existUser = true; break; } } return existUser; } public boolean deleteUser(String userName){ users.trimToSize();; if(existUser(userName)){ int currentIndex = -1; for(int i = 0;i < users.capacity();i++){ if(userName.equals((String)users.get(i))){ currentIndex = i; break; } } if(currentIndex != -1){ users.remove(currentIndex); users.trimToSize(); return true; } } return false; } public Vector getOnlineUser(){ return users; } public void valueBound(HttpSessionBindingEvent e){ users.trimToSize(); System.out.println("请求 ::::::::::" + e.getName()); if(!existUser(e.getName())){ users.add(e.getName()); System.out.print(e.getName() + " 登入到系统 " + new Date()); System.out.println(" 在线用户数为 :" + getCount()); } else { System.out.println(e.getName() + " 已经存在"); } } public void valueUnbound(HttpSessionBindingEvent e){ users.trimToSize(); String userName = e.getName(); deleteUser(userName); System.out.println(userName + " 退出系统 " + new Date()); System.out.println(" 在线用户数为: " + getCount()); } }
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>测试HttpSessionBindingListener接口</title> </head> <body> <form name = "login" method="post" action = "onLineUser.jsp"> <input type = "text" name = "username"> <input type = "submit" name = "submit" value = "登录"/> </form> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.util.*,pub.*" %> <jsp:useBean id = "onlineuser" class="pub.OnlineUser" scope="application"/> <html> <head> <title>搞定JSP在线人数</title> </head> <body> <center> <h1>登录成功,欢迎您访问!</h1> </center> <% session = request.getSession(false); %> <% String username = request.getParameter("username"); if(onlineuser.existUser(username)){ out.println("用户<font color = 'red'>" + username + "</font>已经登陆!"); }else{ session.setMaxInactiveInterval(600); session.setAttribute(username, onlineuser); out.println("欢迎新用户: <font color = 'red'>" + username + "</font>登录得到系统!"); } out.println("<br/>当前在线用户人数:<font color = 'red'>" + onlineuser.getCount() + "</font></br>"); Vector vt = onlineuser.getOnlineUser(); Enumeration e = vt.elements(); out.println("在线用户列表"); out.println("<table border = 1>" + "<tr><td>用户名</td></tr>"); while (e.hasMoreElements()){ out.println("<tr><td>" + (String)e.nextElement() + "<br/>" + "</td></tr>"); } out.println("</table>"); %> <center> <p>elapsed制作</p> </center> <% out.println("<p><a href = 'logout.jsp?username=" + username + "'>退出系统</a></p>"); %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="pub.OnlineUser,java.util.*" %> <jsp:useBean id = "onlineuser" class = "pub.OnlineUser" scope="application"/> <html> <head> <title>搞定JSP在线人数</title> </head> <body> <center> <h1>登录成功 欢迎您的访问</h1> </center> <% String username = request.getParameter("username"); if(username!=null&&onlineuser.deleteUser(username)){ out.println(username + " 已退出系统!"); session.removeAttribute(username); out.println("<script>window.location = 'login.jsp'</script>"); } else { out.println(username + " 已退出系统!"); out.println("<script>window.location = 'login.jsp'</script>"); } %> <center> <p>elapsed制作</p> <p><a href="logpout.jsp">退出系统</a></p> </center> </body> </html>
Servlet Listener 简单示例
最新推荐文章于 2025-04-01 09:42:55 发布