Jakarta EE 在 IntelliJ IDEA 中开发简单留言板应用的实验指导(附完整代码)
摘要:实验基于Jakarta EE 9+(兼容Tomcat 10+)、Maven作为构建工具,并在IntelliJ IDEA 2023.2(Community版免费)中进行。项目使用Maven Archetype WebApp模板生成基础结构,然后升级到Jakarta EE。
这个实验实现了一个简单的Mini Message Board:
- 访问
/board
显示留言表单和已提交的留言列表(按时间倒序)。 - 表单包含昵称(nickname)和留言内容(content)两个字段,均为必填。
- 长度限制:nickname ≤ 50字符,content ≤ 500字符(服务端验证,无效时显示错误消息)。
- 提交后,Servlet处理POST请求,将有效留言记录到内存(使用CopyOnWriteArrayList);重定向刷新页面。
我会提供:
- 详细实验步骤:从项目创建到测试的指导。
- 代码:完整、可复制的pom.xml、Java类(Servlet)、JSP文件、web.xml等。
- 代码解释:每个代码块中添加详细注释,解释实现逻辑、Jakarta EE/HTTP相关知识和关键点。
实验不使用数据库(按要求用内存);扩展部分会添加持久化。
实验准备
- 前提:IntelliJ IDEA 2023.2已安装,JDK 17+配置好(File > Project Structure > SDKs > Add JDK)。Tomcat 10+下载(https://tomcat.apache.org/),解压到本地目录(e.g., C:\Tomcat10)。
- 时间:约1小时(包括调试)。
- 测试工具:浏览器(Chrome)、curl命令(Windows CMD)。
详细实验步骤
步骤1: 使用Maven Archetype创建项目
- 打开IntelliJ IDEA 2023.2,点击“File > New > Project”。
- 选择“Maven Archetype”。
- 配置:
- Name:MiniMessageBoard。
- Location:选择保存目录。
- Archetype:点击“Add Archetype...”,填写:
- GroupId:org.apache.maven.archetypes
- ArtifactId:maven-archetype-webapp
- Version:1.4(稳定版)。
- 点击“OK”,然后“Next”。
- 项目属性:
- GroupId:com.example
- ArtifactId:minimessageboard
- Version:1.0-SNAPSHOT
- 点击“Create”。IntelliJ生成项目,包括pom.xml和src/main/webapp/index.jsp。
步骤2: 更新pom.xml到Jakarta EE并添加依赖
- 双击pom.xml,替换为以下内容(升级到Jakarta EE 9,添加JSTL for JSP):
- 解释:Archetype默认旧Java EE,更新依赖确保jakarta.*命名空间;JSTL用于JSP标签(如<c:forEach>循环显示列表)。
<?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>minimessageboard</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 (包含Servlet, JSP等) --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>9.1.0</version><scope>provided</scope></dependency><!-- JSTL for JSP (标签库, 用于<c:forEach>等) --><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></dependencies><build><plugins><