JSP 指令元素
| 指令 | 屬性 | 說明 |
page | language | 使用語言,僅支援 "java" |
| contentType | MIME 類型,如 "text/html;charset=UTF-8" |
| import | 匯入 Java 套件,如 "java.sql.*" |
include | file | 導入其他檔案內容 (編譯期合併) |
taglib | prefix, uri | 引用自訂標籤庫 |
JSP 標準動作元素
| 元素 | 功能 |
jsp:forward | 轉向其他頁面 |
jsp:include | 動態包含其他檔案 |
jsp:plugin | 插入 Applet 小程式 |
jsp:param | 參數傳值 (配合 forward/include/plugin) |
jsp:useBean | 建立 JavaBean 實例 |
jsp:setProperty | 設定 Bean 屬性 |
jsp:getProperty | 取得 Bean 屬性 |
JSP 內建物件
| 物件 | 常用方法 |
| request | getParameter() 取表單值、getRemoteAddr() 取客戶端 IP |
| response | sendRedirect() 重導向、setContentType() 設 MIME |
| out | 向網頁輸出內容 |
| application | setAttribute()/getAttribute()/removeAttribute() 全域屬性 |
| session | setAttribute()/getAttribute()/removeAttribute()/getId() 會話屬性 |
完整表單處理範例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>表單處理範例</title></head>
<body>
<form name="frm" method="POST" action="process.jsp">
<table border="0">
<tr><td>使用者名稱:</td><td><input type="text" name="username" /></td></tr>
<tr><td>密碼:</td><td><input type="password" name="password" /></td></tr>
<tr><td>性別:</td><td>
<input type="radio" name="gender" value="男" checked />男
<input type="radio" name="gender" value="女" />女
</td></tr>
<tr><td>興趣:</td><td>
<input type="checkbox" name="hobby" value="運動" />運動
<input type="checkbox" name="hobby" value="美術" />美術
<input type="checkbox" name="hobby" value="音樂" />音樂
</td></tr>
<tr><td>專業:</td><td>
<select name="major">
<option value="資工">資訊工程</option>
<option value="文學">文學</option>
<option value="數學">數學</option>
</select>
</td></tr>
<tr><td>備註:</td><td><textarea name="remark" rows="5" cols="30"></textarea></td></tr>
<tr><td><input type="submit" value="送出" /></td></tr>
</table>
</form>
<%
// 處理表單提交 (實際應在 process.jsp)
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
String[] hobbies = request.getParameterValues("hobby");
String major = request.getParameter("major");
String remark = request.getParameter("remark");
// 現代專案建議使用 UTF-8 統一編碼,無需手動 ISO-8859-1 轉碼
out.println("您的資料:<br/>");
out.println("姓名:" + username + "<br/>");
out.println("性別:" + gender + "<br/>");
out.println("興趣:" + (hobbies != null ? String.join(",", hobbies) : "無") + "<br/>");
out.println("專業:" + major + "<br/>");
out.println("備註:" + remark + "<br/>");
%>
</body></html>
關鍵處理細節
request.getParameterValues("hobby") 取得陣列處理多選框
- 單選按鈕同
name 只取一值
- 下拉選單
select 取單一值
- 現代專案:統一 UTF-8 編碼 (頁面、伺服器、資料庫),避免手動
getBytes("ISO-8859-1") 轉碼
- 生產環境:表單提交至獨立處理頁面 (Controller/Servlet),非同頁處理
現代化改進建議
- 使用 JSTL
<c:out> 替代 out.println(),自動防 XSS
- 採用 EL 運算式
${param.username} 簡化參數取得
- Controller 層處理驗證與業務邏輯,JSP 僅負責渲染
- 使用 Bean Validation (JSR-303) 註解驗證表單資料
- 前端框架 (Vue/React) 接管表單狀態,JSP 轉為模板引擎或純 API