JSP 頁面由靜態內容 (HTML/文字) 與動態元素 (Scriptlet、宣告、運算式、註解、指令、動作) 組成。掌握基礎語法是開發動態網頁的起點。
<% ... %>_jspService() 方法內<jsp:scriptlet> ... </jsp:scriptlet><%
String name = request.getParameter("name");
if (name == null || name.isEmpty()) {
name = "訪客";
}
out.println("你好," + name + "!");
%>
<%! ... %>_jspService() 內<jsp:declaration> ... </jsp:declaration><%!
private static final String DEFAULT_NAME = "訪客"; // 常數安全
private int requestCount = 0; // 危險!多執行緒共享
public String greet(String name) {
return "你好," + (name != null ? name : DEFAULT_NAME) + "!";
}
%>
<%
requestCount++; // 競態條件
out.println(greet(request.getParameter("name")));
out.println("請求計數:" + requestCount);
%>
<%
Integer count = (Integer) application.getAttribute("globalCount");
if (count == null) count = 0;
count++;
application.setAttribute("globalCount", count);
out.println("全域請求數:" + count);
%>
<= ... %>out.print())<jsp:expression> ... </jsp:expression><p>現在時間:<%= new java.util.Date() %></p>
<p>2 + 3 = <%= 2 + 3 %></p>
<input value="<%= request.getParameter("name") %>">
<%-- ... --%>| 類型 | 語法 | 輸出至瀏覽器 | 編譯處理 |
|---|---|---|---|
| JSP 註解 | <%-- 註解 --%> | 否 | 完全移除,不編譯 |
| HTML 註解 | <!-- 註解 --> | 是 (檢視原始碼可見) | 視為靜態文字輸出 |
| Java 註解 | <% // 註解 %> 或 <% /* 註解 */ %> | 否 | 編譯進 Servlet 原始碼 |
<%@ ... %>參考 JSP 指令元素完整指南:page、include、taglib。
<jsp:xxx>參考 JSP 動作元素完整指南:include、forward、useBean 等。
${...}. 和 [] 存取屬性/Map/Listparam, header, sessionScope, pageContext 等<p>用戶:${sessionScope.loginUser.name}</p>
<p>查詢關鍵字:${param.q}</p>
<c:if test="${param.page gt 1}">...</c:if>
<c:forEach items="${requestScope.items}" var="item">${item.name}</c:forEach>
Scriptlet 中可使用完整 Java 控制結構:
<% if (user.isAdmin()) { %>
<a href="/admin">管理後台</a>
<% } else { %>
<a href="/profile">個人資料</a>
<% } %>
<%
String role = user.getRole();
switch (role) {
case "admin": out.print("管理員"); break;
case "editor": out.print("編輯"); break;
default: out.print("一般用戶");
}
%>
<ul>
<% for (int i = 1; i <= 5; i++) { %>
<li>項目 <%= i %></li>
<% } %>
</ul>
<%-- JSTL 替代 (推薦) --%>
<c:forEach begin="1" end="5" varStatus="s">
<li>項目 ${s.count}</li>
</c:forEach>
true/false、整數、浮點數、字串 (單/雙引號)、null<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>頁面標題</title> </head> <body> <%-- 內容 --%> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP Hello World</title> </head> <body> <h1>Hello World!</h1> <p>您的 IP:<%= request.getRemoteAddr() %></p> <p>伺服器時間:<%= new java.util.Date() %></p> <%-- JSP 註解:這行不會輸出到瀏覽器 --%> </body> </html>
errorPage + isErrorPage="true" 統一異常處理