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