JSP (Jakarta Server Pages) 簡介與核心優勢
JSP (原 JavaServer Pages,現屬 Jakarta EE) 是一種伺服器端動態網頁技術,允許在靜態 HTML/XML 模板中嵌入 Java 程式碼與特定標籤,經由 Web 容器 (如 Tomcat) 編譯執行,產生動態內容回傳給瀏覽器。
核心特性
| 特性 | 說明 |
| 模板語言 | HTML/XML 為主體,動態部分用 <% ... %>、${...}、<jsp:xxx> 插入 |
| 編譯執行 | .jsp → .java (Servlet) → .class → 容器管理實例、多執行緒服務 |
| 標準 API | Servlet、JSP、EL、JSTL、標籤庫規格,容器可攜性高 |
| 整合生態 | 無縫存取 JDBC、JNDI、JTA、JavaMail、JMS、CDI、Bean Validation 等企業級 API |
| 關注點分離 | 配合 MVC:JSP 做 View,Servlet/Controller 做流程控制,JavaBean/Service 做業務邏輯 |
為什麼選擇 JSP? (vs 替代方案)
| 比較項目 | JSP | CGI/Perl/PHP (傳統) | 純 Servlet | 前端框架 (Vue/React) |
| 效能 | 編譯後類別常駐記憶體,多執行緒共享 | 每請求啟動進程/解釋器,開銷大 | 同 JSP (本質相同) | 首屏較大,後續 API 輕量 |
| 開發體驗 | HTML 為主,插入動態碼直觀 | 程式碼輸出 HTML 字串痛苦 | out.println() 大量字串拼接難維護 | 組件化、熱重載、工具鏈豐富 |
| 企業級功能 | 原生整合 Java EE/Jakarta EE 全套 | 需額外庫/框架 | 同 JSP | 需後端 API 配合 |
| 學習曲線 | Java 開發者平滑 | 語言各異 | 需深入 Servlet API | 需掌握 JS/TS 生態 |
| 部署 | WAR 包丟入容器 | 腳本+伺服器配置 | 同 JSP | 靜態檔案+API 服務分離部署 |
JSP 適用場景
- 傳統企業內部系統:ERP、CRM、OA、報表系統,伺服器端渲染、SEO 不需求、團隊以 Java 為主
- 維護既有專案:大量 JSP 代碼庫,重寫成本高
- 簡單動態頁面:原型、管理後台、表單處理、檔案上傳下載
- 教學/學習 Servlet 基礎:理解請求/回應、Session、Filter、Listener 核心機制
現代化建議:漸進式遷移
- Controller 前移:業務邏輯從 JSP Scriptlet 移至 Servlet/Spring Controller
- View 純化:JSP 僅保留 EL + JSTL + 模板輸出,移除 Java 程式碼
- 引入模板引擎:Thymeleaf、FreeMarker 替代 JSP,語法更安全、支援原型預覽
- REST API 化:Controller 回傳 JSON,前端採用 Vue/React/Angular
- Spring Boot 遷移:內嵌容器、自動配置、Actuator 監控、雲原生就緒
第一個 JSP 範例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一個 JSP</title>
</head>
<body>
<h1>Welcome to JSP!</h1>
<p>伺服器時間:<%= new java.util.Date() %></p>
<p>您的 IP:<%= request.getRemoteAddr() %></p>
<ul>
<% for (int i = 1; i <= 3; i++) { %>
<li>項目 <%= i %></li>
<% } %>
</ul>
</body>
</html>
學習路徑建議
- Java 基礎:語法、集合、例外、IO、多執行緒、JDBC
- Web 基礎:HTTP、HTML/CSS/JS、瀏覽器開發者工具
- Servlet 核心:生命週期、Request/Response、Session、Filter、Listener
- JSP 語法:指令、動作、EL、JSTL、隱含物件、錯誤處理
- MVC 模式:Servlet 控制、JavaBean 模型、JSP 視圖
- 資料庫整合:連線池、DAO 模式、交易管理
- 框架進階:Spring MVC、Spring Boot、MyBatis/JPA、Spring Security
- 現代前端:REST API、Vue/React、Webpack/Vite、TypeScript
資源連結