学习 java web 简单监听器
目录结构
├── src\
│ └── com\
│ └── zhang\
│ ├── listener\
│ │ ├── MyListener.java
│ │ └── MyListener2.java
│ └── servlet\
│ └── ListenerServlet.java
└── web\├── WEB-INF\│ └── web.xml├── index.jsp└── main.jsp
技术栈
- 后端 :Java Servlet + 监听器(Listener)
- 前端 :JSP(JavaServer Pages)
- 通过监听器实现应用启动/销毁时的资源管理
- 通过Servlet处理HTTP请求
- 使用JSP实现动态页面渲染
后端代码
package com.zhang.listener;import javax.servlet.*;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.Date;/*** 监听器* 监听作用域对象的创建和销毁以及属性的相关配置,可以添加一些属性配置,做逻辑判断** 主要监听三种作用域* ServletContext(application) session request** request* 接口:* ServletRequestListener:监听request对象的创建和销毁* public void requestDestroyed(ServletRequestEvent servletRequestEvent) request对象销毁时添加的逻辑代码* public void requestInitialized(ServletRequestEvent servletRequestEvent) request对象创建时添加的逻辑代码* ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改* public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性添加时要做的事情* public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性删除时要做的事情* public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性更改时要做的事情* ServletContext:* 接口:ServletContextListener 监听servletContext对象的创建和销毁* public void contextInitialized(ServletContextEvent servletContextEvent)创建对象,当启动tomcat服务器的时候创建* public void contextDestroyed(ServletContextEvent servletContextEvent)销毁对象,当关闭tomcat服务器的时候销毁* ServletContext:* 接口: ServletContextListener: 监听servletContext对象的属性的添加和删除和更改* public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent)添加属性* public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent)删除属性* public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent)修改属性* session:* 接口: HttpSessionListener 监听session对象的创建和销毁* public void sessionCreated(HttpSessionEvent httpSessionEvent)session对象创建的时候执行* public void sessionDestroyed(HttpSessionEvent httpSessionEvent)session对象销毁的时候执行* 接口:HttpSessionAttributeListener 监听session对象的属性的添加和删除和更改* public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) 添加属性* public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) 删除属性* public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) 修改属性*属性的参数不同*/
public class MyListener implements ServletRequestListener, ServletRequestAttributeListener, ServletContextListener,ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener {@Overridepublic void requestDestroyed(ServletRequestEvent servletRequestEvent) {System.out.println("request对象被销毁"+new Date());}@Overridepublic void requestInitialized(ServletRequestEvent servletRequestEvent) {System.out.println("request对象被创建"+new Date());}@Overridepublic void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {System.out.println("项目request作用域添加数据");System.out.println(servletRequestAttributeEvent.getName());System.out.println(servletRequestAttributeEvent.getValue());}@Overridepublic void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {System.out.println("项目request作用域删除数据");System.out.println(servletRequestAttributeEvent.getName());System.out.println(servletRequestAttributeEvent.getValue());}@Overridepublic void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {System.out.println("项目request作用域属性替换");System.out.println(servletRequestAttributeEvent.getName());System.out.println(servletRequestAttributeEvent.getValue());}@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("servletContext创建");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("servletContext销毁");}@Overridepublic void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContext添加属性");System.out.println(servletContextAttributeEvent.getName());System.out.println(servletContextAttributeEvent.getValue());}@Overridepublic void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContext删除属性");System.out.println(servletContextAttributeEvent.getName());System.out.println(servletContextAttributeEvent.getValue());}@Overridepublic void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContext修改属性");System.out.println(servletContextAttributeEvent.getName());System.out.println(servletContextAttributeEvent.getValue());}@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {System.out.println("session对象被创建");}@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {System.out.println("session对象被销毁");}@Overridepublic void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("session添加属性");System.out.println(httpSessionBindingEvent.getName());System.out.println(httpSessionBindingEvent.getValue());}@Overridepublic void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("session删除属性");System.out.println(httpSessionBindingEvent.getName());System.out.println(httpSessionBindingEvent.getValue());}@Overridepublic void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("session修改属性");System.out.println(httpSessionBindingEvent.getName());System.out.println(httpSessionBindingEvent.getValue());}
}package com.zhang.listener;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;/*** 监听访问次数*/
public class MyListener2 implements HttpSessionListener, ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {
//获取applicationServletContext sc = servletContextEvent.getServletContext();//设置网站在线人数的初始值sc.setAttribute("count",0);}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("servletContext被销毁");}@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {
//获取applicationServletContext sc = httpSessionEvent.getSession().getServletContext();int count = (int)sc.getAttribute("count");sc.setAttribute("count",++count);}@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//获取applicationServletContext sc = httpSessionEvent.getSession().getServletContext();int count = (int)sc.getAttribute("count");sc.setAttribute("count",--count);}
}package com.zhang.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;//@WebServlet(name = "ListenerServlet")
public class ListenerServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码格式request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");System.out.println("ListenerServlet逻辑处理");
// request.setAttribute("listener","listener");
// request.removeAttribute("listener");//向servletContext中添加属性
// ServletContext sc = this.getServletContext();
// sc.setAttribute("servletContext","servletContext--value");//向session作用域中添加属性HttpSession session = request.getSession();session.setAttribute("session","session--value");session.invalidate();//session默认三十分钟失效response.getWriter().write("listener study");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);}
}
web
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>ListenerServlet</servlet-name>
<servlet-class>com.zhang.servlet.ListenerServlet</servlet-class></servlet><servlet-mapping><servlet-name>ListenerServlet</servlet-name><url-pattern>/listener</url-pattern></servlet-mapping><listener><listener-class>com.zhang.listener.MyListener</listener-class></listener><listener><listener-class>com.zhang.listener.MyListener2</listener-class></listener>
</web-app>
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body>$END$</body>
</html><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>main</title>
</head>
<body>
当前在线的人数是:${applicationScope.count}
</body>
</html>
用到的jar
jsp-api.jar
servlet-api.jar