当前位置: 首页 > news >正文

学习 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

http://www.dtcms.com/a/307479.html

相关文章:

  • 《能碳宝》AI辅助开发系统方案
  • ES 工业网关:比德国更适配,比美国更易用
  • 编程语言Java——核心技术篇(六)解剖反射:性能的代价还是灵活性的福音?
  • Ubuntu/Debian 搭建 Nginx RTMP 服务器全攻略
  • 使用的IDE没有内置MCP客户端怎么办?
  • [源力觉醒 创作者计划]_文心4.5开源测评:国产大模型的技术突破与多维度能力解析
  • 数据库中使用SQL作分组处理01(简单分组)
  • Web3.0 和 Web2.0 生态系统比较分析:差异在哪里?
  • Web3:在 VSCode 中使用 Vue 前端与已部署的 Solidity 智能合约进行交互
  • Kotlin -> 普通Lambda vs 挂起Lambda
  • Astra主题WooCommerce如何添加可变产品Astra variation product
  • tplink er2260t配置vlan透传iptv
  • python学智能算法(二十九)|SVM-拉格朗日函数求解中-KKT条件理解
  • 数据结构: 双向列表
  • 银河麒麟桌面操作系统:自定义截图快捷键操作指南
  • NXP i.MX8MP GPU 与核心库全景解析
  • rapidocr_web v1.0.0发布了
  • 旧物重生,交易有温度——旧物回收二手交易小程序,让生活更美好
  • 从“碎片化”到“完美重组”:IP报文的分片艺术
  • 从遮挡难题到精准测量:激光频率梳技术如何实现深孔 3D 轮廓的 2um 级重复精度?
  • 《Java 程序设计》第 15 章 - 事件处理与常用控件
  • 【Python修仙编程】(二) Python3灵源初探(9)
  • 无人机飞控系统3D (C++)实践
  • Coze Studio概览(四)--Prompt 管理功能详细分析
  • React的基本语法和原理
  • 力扣 Pandas 挑战(6)---数据合并
  • 融媒体中心网络安全应急预案(通用技术框架)
  • 【Debian】4-‌2 Gitea搭建
  • 专业鼠标点击器,自定义间隔次数
  • 前端核心技术Node.js(五)——Mongodb、Mongoose和接口