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

Jakarta EE 实验 — Web 聊天室(过滤器、监听器版)进阶

Jakarta EE 实验 — Web 聊天室(过滤器、监听器版)进阶

  • 使用JSP表单:在JSP页面(如login.jsp和chat.jsp)中使用<form>标签提交数据(POST方法),恢复传统表单提交方式。这符合实验要求的功能(如登录和消息发送),并避免了之前版本的JavaScript fetch。
  • 不用在web.xml中mapping:所有Servlet的URL映射从web.xml移除,使用@WebServlet注解直接写在Servlet类的上方。
  • 注解写在servlet类的上方:每个Servlet类上方添加@WebServlet注解,指定URL模式(e.g., @WebServlet("/login"))。

  • 过滤器扩展
    • 在EncodingFilter中添加日志记录(记录请求URL、方法和时间)和简单性能监控(测量Filter处理时间,并日志记录如果超过阈值)。
    • 动态维护敏感词表:从web.xml的<init-param>读取敏感词列表(配置化),允许动态修改而不改代码。如果需要从数据库读取,可扩展为在init()方法中查询数据库(代码中添加注释说明)。
  • 监听器扩展
    • 添加ServletContextAttributeListener监听Application(ServletContext)属性变化,实现细粒度状态管理(e.g., 日志记录属性添加/替换/移除)。
    • 添加HttpSessionAttributeListener监听Session属性变化,当"username"属性被修改时(e.g., 用户更换用户名),自动更新在线用户列表(移除旧名,添加新名)。

一、扩展原则

  • 保持原有实验结构,仅添加扩展功能。
  • 提供完整的、更新后的代码(包括pom.xml、web.xml、JSP、Filter、Listener和Servlet)。
  • 在代码中添加详细注释,解释扩展点、关键知识(如Filter/Listener的工作原理、扩展功能)和思考。
  • 项目仍使用Maven + Tomcat运行。测试时,可修改web.xml中的init-param测试动态敏感词。

二、回答思考与扩展(总结)

  1. 过滤器扩展

    • 额外功能:日志记录(e.g., 请求细节)和性能监控(e.g., 时间测量)是Filter的典型扩展,可用于调试和优化。压缩响应(e.g., GZIP)可通过包装响应实现,但代码中未添加以保持简单。
    • 动态维护敏感词表:通过web.xml <init-param>配置(代码中实现),或从数据库读取(init()中添加JDBC查询,注释说明)。这使敏感词可配置化,提高灵活性。
  2. 监听器扩展

    • 监听Application/Request属性变化:使用ServletContextAttributeListener监听全局属性(代码中实现,日志变化);ServletRequestAttributeListener可类似监听请求属性,实现细粒度管理(如实时监控共享数据变化)。
    • 结合HttpSessionAttributeListener:当Session属性(如"username")变化时,自动更新在线用户列表(代码中实现)。这处理用户修改资料场景,确保列表一致性。

现在,提供完整的、更新后的代码。变化点用注释突出。


三、实验步骤

步骤1: 创建Jakarta EE项目

(同原步骤,无变化)打开IntelliJ IDEA 2025.2,选择“Java Enterprise”(Jakarta EE),使用Maven构建,添加Tomcat服务器。项目名称如“ChatRoomWithFiltersListeners”。

步骤2: 配置pom.xml(添加Jakarta EE依赖)

(同原代码,无变化)完整pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>chatroom-with-filters-listeners</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!-- Jakarta EE API (includes Servlet, Filter, Listener, JSP) --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-api</artifactId><version>10.0.0</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- Tomcat Maven Plugin for running the app --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build>
</project>

代码解释(详细注释)

  • // 这个pom.xml定义了Jakarta EE依赖,用于Servlet、Filter、Listener等。scope=provided表示运行时由Tomcat提供实现。
  • // Tomcat插件用于快速运行项目。无变化,因为约束不影响依赖。

步骤3: 配置web.xml(移除mapping,添加Filter init-param和扩展Listener)

web.xml中移除所有Servlet相关的<servlet><servlet-mapping>(按约束)。为EncodingFilter添加<init-param>用于动态敏感词。添加扩展Listener声明。完整web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!-- Listener 配置:原有 + 扩展(属性变化监听) --><listener><listener-class>com.example.listener.AppInitListener</listener-class></listener><listener><listener-class>com.example.listener.SessionLifecycleListener</listener-class></listener><!-- 扩展:监听Application属性变化 -->
http://www.dtcms.com/a/403378.html

相关文章:

  • 腾讯风铃怎么做网站wordpress添加百度统计代码
  • JMeter的取样器
  • LSTM自然语言处理情感分析项目(一)构建词汇表
  • 门户网站建设ppt方案企业网站建设教程pdf
  • 搭建网站的企业淘客帝国 wordpress
  • HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化
  • Vue.js 生命周期详解
  • 云手机远程控制的作用
  • Vue3》》vite》》 vue-router 和文件路由
  • 个人网站搭建详细步骤线上做汉语教师网站
  • GUIAgent:大模型驱动的浏览器自动化助手
  • Ubuntu gdb attach 权限问题
  • 做设计一般用的素材网站是什么asp 做网站的好处
  • 破解php网站后台密码怎样在wordpress里面调出菜单
  • 构建AI智能体:四十三、智能数据分析机器人:基于Qwen-Agent与Text2SQL的门票分析方案
  • CSS模板语法修复总结
  • 班级网站界面东平网站建设
  • Linux开发工具(编辑器gcc/g++,make/Makefile,gdb)
  • shell编程:sed - 流编辑器(4)
  • 没有网站怎么做推广丹阳网站建设策划
  • 【Linux】Ext系列文件系统(下)
  • 国外网站域名备案邢台网站建设公司排名
  • 技术分享 | 基于Dify的多终端亚马逊云科技智能化运维助手
  • GPU服务器,Docker启动出现could not select device driver ““ with capabilities: [[gpu]].
  • HarmonyOS 5 性能优化全攻略:从启动加速到内存管理
  • 电子商务专业毕业从事什么工作网站建设网站优化相关资讯文章
  • 我用ChatGPT完成选题的全过程复盘
  • 抖音视频图片如何去水印?去水印工具分享
  • 精读《C++20设计模式》:重新理解设计模式系列
  • Windows IIS搭建ASP网站的流程和注意事项