Jakarta EE 在 IntelliJ IDEA 中開發簡單留言板應用的實驗指導(附完整代碼)

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創建項目

  1. 打開IntelliJ IDEA 2023.2,點擊“File > New > Project”。
  2. 選擇“Maven Archetype”。
  3. 配置:
    • Name:MiniMessageBoard。
    • Location:選擇保存目錄。
    • Archetype:點擊“Add Archetype...”,填寫:
      • GroupId:org.apache.maven.archetypes
      • ArtifactId:maven-archetype-webapp
      • Version:1.4(穩定版)。
    • 點擊“OK”,然后“Next”。
  4. 項目屬性:
    • GroupId:com.example
    • ArtifactId:minimessageboard
    • Version:1.0-SNAPSHOT
  5. 點擊“Create”。IntelliJ生成項目,包括pom.xml和src/main/webapp/index.jsp。

步驟2: 更新pom.xml到Jakarta EE并添加依賴

  1. 雙擊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><

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96827.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript經典面試題一(JavaScript基礎)

目錄 一、JavaScript中的變量提升 1. 機制 2. 示例 3. 注意事項 4. 總結 二、var、let和const的區別。 1. 作用域&#xff08;Scope&#xff09; 2. 變量提升&#xff08;Hoisting&#xff09; 3. 重新賦值和重新聲明 4. 示例 示例1&#xff1a;作用域和塊級行為 示…

數據庫造神計劃第七天---增刪改查(CRUD)(3)

&#x1f525;個人主頁&#xff1a;尋星探路 &#x1f3ac;作者簡介&#xff1a;Java研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《從青銅到王者&#xff0c;就差這講數據結構&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此簡單&a…

AWS SQS 可觀測性最佳實踐

AWS SQS AWS SQS&#xff08;Amazon Simple Queue Service&#xff09;是一種完全托管的消息隊列服務&#xff0c;用于在分布式系統中解耦和緩沖消息。它支持高可用性、可擴展性和安全性&#xff0c;能夠處理大量消息&#xff0c;確保消息的可靠傳輸和順序性。開發者可以輕松集…

AI推理范式:從CoT到ReAct再到ToT的進化之路

在人工智能領域&#xff0c;如何讓模型像人類一樣進行復雜推理和問題解決&#xff0c;一直是核心挑戰。近年來&#xff0c;思維鏈&#xff08;Chain-of-Thought, CoT&#xff09;、推理與行動&#xff08;ReAct&#xff09; 和 思維樹&#xff08;Tree-of-Thoughts, ToT&#x…

2025時序數據庫選型:深入解析IoTDB從主從架構基因到AI賦能的創新之路

原創經驗總結,拒絕空談,用數據和實戰說話 時序數據時代的"四重考驗" 在智慧工廠、新能源車、金融市場等場景中,每秒百萬級的數據點如潮水般涌來。這些時序數據背后隱藏著四大核心挑戰:極高的寫入并發、強時間關聯性查詢、海量數據生命周期管理,以及亂序與高基…

深入淺出LVS負載均衡群集:原理、分類與NAT模式實戰部署

深入淺出LVS負載均衡群集&#xff1a;原理、分類與NAT模式實戰部署 文章目錄深入淺出LVS負載均衡群集&#xff1a;原理、分類與NAT模式實戰部署一、企業群集&#xff1a;從單臺服務器到分布式架構的必然選擇1. 什么是群集&#xff1f;2. 為什么需要群集&#xff1f;二、企業群集…

Flash Table實測:JAI賦能低代碼開發,重塑企業級應用構建范式

目錄&#x1f50d; 引言1.1 什么是Flash Table1.2 低代碼平臺的進化與FlashTable的革新?FlashTable背景&#xff1a;為什么需要新一代低代碼平臺&#xff1f;2.1 傳統開發的痛點2.2 低代碼平臺的局限2.3 FlashTable的差異化定位&#x1f4bb; FlashTable安裝&#xff1a;Docke…

SonarQube代碼質量管理平臺本地化搭建和使用

SonarQube 是一個開源的代碼質量管理平臺&#xff0c;主要用于持續檢查代碼質量&#xff0c;支持多種編程語言。 本文章記錄了在windows環境中&#xff0c;搭建和使用SonarQube的完整過程。 ①SonarQube平臺搭建 SonarQube最新社區版本下載地址&#xff1a; https://www.son…

基于雙向LSTM深度學習網絡模型的文本序列推薦系統matlab仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.部分程序 4.算法理論概述 5.完整程序 1.程序功能描述 在信息爆炸的時代&#xff0c;用戶面臨著海量文本信息的篩選難題&#xff0c;文本序列推薦系統應運而生。雙向長短期記憶網絡&#xff08;Bi-directional Long …

Transformer實戰(17)——微調Transformer語言模型進行多標簽文本分類

Transformer實戰(17)——微調Transformer語言模型進行多標簽文本分類 0. 前言 1. 多標簽文本分類 2. 數據加載與處理 3. 模型微調 小結 系列鏈接 0. 前言 與單標簽分類不同,多標簽分類要求模型能夠為同一文本分配多個相關標簽,這在新聞分類、文獻標注、內容推薦等場景中尤…

開源 C++ QT Widget 開發(十六)程序發布

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 C QT Widget 開發&#xff08;一&#xff09;工程文件結構-CSDN博客 開源…

MATLAB2-結構化編程和自定義函數-臺大郭彥甫視頻

目錄 if elseif else switch case otherwise while exercise練習 for 預宣告 練習題 break tips編程的小技巧 functions函數 練習題 函數句柄 if elseif else 如果condition為真&#xff0c;執行語句 if condition1statement1 elseif condition2statement2 elsest…

LVGL移植2048小游戲全攻略

目錄 準備腳手架 修改源碼 對接觸摸 測試編譯 測試運行 這一節將以一個已經編寫好的 lvgl 小游戲 2048 描述如何將已經編寫完成的 lvgl 程序移植到開發板上。 準備腳手架 在這之前&#xff0c;我們先準備基礎的 LVGL 腳手架。可以直接從 lv_g2d_test 里復制過來進行修改…

在Unity2021中使用Profiler的Deep Profile功能時內存超高怎么辦?

這通常是因為Deep Profile會記錄每一幀所有函數調用的詳細信息&#xff0c;導致內存急劇增長&#xff0c;尤其在大型項目或復雜場景中4。別擔心&#xff0c;我來幫你分析原因并提供一些解決辦法。 理解 Deep Profile 的內存開銷與替代方案 Deep Profile是Unity Profiler的一個…

Ubuntu 設置中文輸入法

一、使用 IBus&#xff08;Ubuntu 默認框架&#xff09;步驟 1&#xff1a;安裝中文輸入法sudo apt install ibus-libpinyin ibus-pinyin步驟 2&#xff1a;添加輸入法打開 Settings > Keyboard > Input Sources。點擊 “”&#xff0c;搜索 Chinese (Intelligent Pinyin…

【Zephyr電源與功耗專題】14_BMS電池管理算法(三重驗證機制實現高精度電量估算)

文章目錄前言一、算法系統框架設計介紹1.1&#xff1a;核心設計方式1.2&#xff1a;系統架構圖1.3&#xff1a;核心參數配置二、核心算法詳解2.1&#xff1a;硬件數據采集與濾波2.2&#xff1a;三重算法機制2.2.1&#xff1a;庫侖計法&#xff08;電流積分&#xff09;2.2.2&am…

Python網絡與多任務編程:TCP/UDP實戰指南

Python網絡與多任務編程&#xff1a;TCP/UDP實戰指南 一、網絡編程 1.1 前言 網絡編程是現代軟件開發中不可或缺的一部分&#xff0c;它使得不同設備之間的數據交換成為可能。Python提供了強大的標準庫來支持各種網絡編程需求。 1.1.1 IP地址簡介 IP地址是互聯網上設備的唯一標…

Android8 binder源碼學習分析筆記(四)——ServiceManager啟動

前文回顧&#xff1a; Android8 binder源碼學習分析筆記&#xff08;三&#xff09;&#xff1a; https://blog.csdn.net/g_i_a_o_giao/article/details/151365630?spm1001.2014.3001.5502 Android8 binder源碼學習分析筆記&#xff08;二&#xff09;&#xff1a; https://…

Redis 大 Key 與熱 Key:生產環境的風險與解決方案

&#x1f525; Redis 大 Key 與熱 Key&#xff1a;生產環境的風險與解決方案 文章目錄&#x1f525; Redis 大 Key 與熱 Key&#xff1a;生產環境的風險與解決方案&#x1f9e0; 一、問題定義與識別&#x1f4a1; 什么是大 Key&#xff1f;&#x1f525; 什么是熱 Key&#xff…

C++算法題中的輸入輸出形式(I/O)

本文主要幫助刷leetcode題型快速適應完整帶輸入輸出的題&#xff08;機試、考試、比賽等&#xff09;接收能用cin就用cin 。cin 自動分割單詞 的特性&#xff08;cin 讀取字符串時會自動跳過空格 / 換行&#xff0c;將連續非空格字符作為一個 “單詞”&#xff09;一、單組輸入…