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

Jakarta EE课程 微型资料投递与分发 实验指导(付完整版代码)

Jakarta EE课程 微型资料投递与分发 实验指导 (付完整版代码)

       摘要:基于之前的HTTP实验(DropsServlet等),我将提供使用H2数据库的版本来改造“资料投递箱”为“临时分享链接”。这个方案实现了:

  • 每个文件只允许下载一次(下载后从数据库删除记录)。
  • 文件在一定时间后自动过期(使用定时任务每分钟查询并删除过期记录;虽然有轻微延迟,但通过短间隔最小化;相比Redis TTL,H2更适合需要查询/持久化的场景)。
  • 其他原功能保持:上传文件+描述、生成ID、HTTP响应(302/201/304/413/415)、XSS转义。

为什么用H2

  • H2是嵌入式SQL数据库,易集成JPA/Hibernate,支持文件模式持久化(数据存盘,重启不丢)。
  • 优点:结构化查询(易查看内容)、自动表创建;缺点:清理需定时任务(可能有秒级延迟),但适合您的Jakarta EE项目(无需额外服务器如Redis)。
  • 与Redis比较:H2更重但功能丰富(SQL查询);如果需要零延迟,Redis更好,但您指定H2。

       代码在IntelliJ IDEA中可直接集成(基于Maven Archetype WebApp项目)。假设项目名为HttpExperiment,运行Tomcat 10+。我提供完整代码文件,便于复制。

设计思路和说明

  • 存储结构:使用JPA实体FileEntity(字段:id, description, content (BLOB), contentType, expireTime, downloadCount)。
  • 上传(doPost):生成ID,设置expireTime(当前时间 + 1小时),downloadCount=0,persist到H2。
  • 下载(doGet):查询记录,检查expireTime(过期删除返回410),downloadCount < 1(否则404);下载后设置downloadCount=1并更新(或直接删除实现单次)。
  • 过期清理:Servlet init()启动ScheduledExecutorService,每60秒查询并删除expireTime < now的记录(使用JPA delete query)。
  • 单次下载:下载后删除记录(简单实现;可改成更新count,允许多次但这里严格单次)。
  • 挑战与解决:定时延迟(短间隔最小化);大文件(BLOB限数据库大小,生产用文件系统);并发(JPA事务锁确保安全)。
  • 优缺点:易查看(SQL查询),持久化好;但清理不如Redis TTL即时。

配置步骤

  1. 确保H2依赖:pom.xml中添加/确认H2和Hibernate(详见代码)。
  2. 数据库模式:文件模式(jdbc:h2:./filedb),生成filedb.mv.db文件,便于查看。
  3. 运行:IntelliJ Run Tomcat,访问/drops。

完整代码

pom.xml(完整,包含H2和Hibernate)
<?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>httpexperiment</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 Web API --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>9.1.0</version><scope>provided</scope></dependency><!-- JSTL for JSP --><dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>2.0.0</version></dependency><!-- Jackson for JSON --><dependency><groupId>com.fasterxml.jackson.core</groupId

文章转载自:

http://g5XxtVYX.mjgLk.cn
http://1poNBrKk.mjgLk.cn
http://cYnv9lnV.mjgLk.cn
http://JbPFjSty.mjgLk.cn
http://zT96qjuP.mjgLk.cn
http://qFMvnzxJ.mjgLk.cn
http://zhoiTuMj.mjgLk.cn
http://FdpSzYxA.mjgLk.cn
http://VyLMBJL6.mjgLk.cn
http://t5HImq0b.mjgLk.cn
http://XT38f2D5.mjgLk.cn
http://dSGnbeHp.mjgLk.cn
http://m6PcnYc1.mjgLk.cn
http://aDBLOWr3.mjgLk.cn
http://R3kW3vUE.mjgLk.cn
http://l17EpQRQ.mjgLk.cn
http://YNmXDvqo.mjgLk.cn
http://znJist6A.mjgLk.cn
http://yi0amBS0.mjgLk.cn
http://HSjug2eo.mjgLk.cn
http://QKKDlyVx.mjgLk.cn
http://pVZMV5n5.mjgLk.cn
http://IhcvHkKT.mjgLk.cn
http://gdDSt7bU.mjgLk.cn
http://HVR0uTKF.mjgLk.cn
http://5Fewf3RK.mjgLk.cn
http://NmFJxaSM.mjgLk.cn
http://yAfk0wQN.mjgLk.cn
http://bnV3WRMe.mjgLk.cn
http://TJEjODvb.mjgLk.cn
http://www.dtcms.com/a/376168.html

相关文章:

  • 基于autoawq进行qwen3 的awq量化
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:c-2.增量风险管控
  • Windows系统下KingbaseES数据库保姆级安装教程(附常见问题解决)
  • Python实现讯飞星火大模型Spark4.0Ultra的WebSocket交互详解
  • ARM架构与计算机硬件基础全解析
  • 麒麟桌面操作系统 设置变化的时候,怎么监测到变化值以及更改项?
  • Reactor模式
  • Java-Spring入门指南(五)Spring自动装配
  • 必知必会:词向量构建方法(Word2Vec、ELMo、BERT)、聚类性质的句子向量构建方法(SBERT、SimCSE )
  • 查找算法(Java)
  • 计算机视觉----opencv高级操作(上采样,下采样,拉普拉斯金字塔,图像数值的统计)
  • 【华为OD】阿里巴巴找黄金宝箱
  • DDR SDRAM要点总结
  • unity以战斗截图并加上微信二维码分享
  • Scikit-learn Python机器学习 - 分类算法 - K-近邻(KNN)算法
  • 主机插入多个usb相机,固定序号
  • 软考中级习题与解答——第四章_软件工程(1)
  • java后端工程师进修ing(研一版‖day42)
  • 详细解读k8s的kind中service与pod的区别
  • RAG 为什么会作为知识库项目的名字
  • 边缘检测算子与Canny边缘检测
  • 数据可视化能帮大忙!一文教会小白怎么做可视化数据图表!
  • MAC 多个版本 JDK进行切换
  • macOS是开发的终极进化版吗?
  • Visual Studio 发布项目 win-86 win-64 win-arm win-arm64 osx-64 osx-64 osx-arm64 ...
  • Mac环境Neovim 与 LazyVim 安装指南
  • 解决行业痛点,蓝牙云屏引领设备升级​
  • Go语言开发AI应用
  • armbian平台ubuntu环境下telnet安装及启动,给pantherX2增加一个应急通道
  • Android中处理流式数据切割