一、Servlet 核心三要素
- 繼承
HttpServlet
- 實現
doGet() 或 doPost()
web.xml 配置 <servlet> + <servlet-mapping>(Servlet 3.0+ 可用 @WebServlet 註解替代)
二、核心 API 速查
| 對象 | 常用方法 | 作用 |
| HttpServletRequest | getParameter/Values/Map、get/setAttribute、setCharacterEncoding | 請求參數、屬性傳遞、編碼設置 |
| HttpServletResponse | sendRedirect、getWriter、setContentType | 重定向、輸出流、響應類型編碼 |
| HttpSession | get/setAttribute、invalidate、setMaxInactiveInterval | 會話級數據存儲 |
| ServletContext | get/setAttribute、getRealPath、getResourceAsStream | 應用級共享數據、資源訪問 |
三、四大會話跟蹤技術對比
| 方式 | 原理 | 優點 | 缺點 |
| HttpSession | 服務端內存 + Cookie(JSESSIONID) | 安全、容量大、對象任意 | 集群需同步、消耗內存 |
| Cookie | 客戶端鍵值對 | 持久化、跨會話 | 大小限 4KB、用戶可禁用、不安全 |
| 隱藏表單域 | <input type="hidden"> | 無需 Cookie 支持 | 僅限表單提交、明文可見 |
| URL 重寫 | 參數拼接在鏈接 | 無 Cookie 也能工作 | URL 醜陋、易洩露、需全站改造 |
四、請求轉發 vs 重定向 本質區別
| 特性 | forward (內部轉發) | sendRedirect (外部重定向) |
| 請求/響應次數 | 1 次 | 2 次 |
| request 域共享 | 是 | 否 |
| 瀏覽器地址欄 | 不變 | 更新 |
| 可訪問範圍 | 當前 Web 應用內部 | 任意 URL |
| 效率 | 高 | 稍低 |
五、三大標準作用域
request < session < ServletContext(生命周期由短到長)
共同方法:setAttribute/getAttribute/removeAttribute
六、JSP 七大構成元素
- 靜態內容 (HTML)
- 指令:
<%@ page/include/taglib ... %>
- 表達式:
<%= expr %>
- Scriptlet:
<% java code %>
- 聲明:
<%! field/method %>
- 動作:
<jsp:useBean/setProperty/forward/include...>
- 註釋:
<%-- 服務端 --%> / <!-- 客戶端 -->
七、JSP 執行生命周期
- 翻譯:.jsp → .java (Servlet)
- 編譯:.java → .class
- 執行:容器實例化 Servlet,調用 service()
首次訪問慢(翻譯+編譯),後續直接執行 .class,速度快。
八、九大隱式對象
| 分類 | 對象 | 類型 |
| 輸入/輸出 | request, response, out | HttpServletRequest, HttpServletResponse, JspWriter |
| 作用域 | pageContext, request, session, application | PageContext, HttpServletRequest, HttpSession, ServletContext |
| Servlet 相關 | page, config | Object(this), ServletConfig |
| 異常 | exception | Throwable (僅錯誤頁) |
九、JavaBean 規範
- public class
- public 無參構造器
- private 屬性 + public getter/setter
十、標準動作標籤速查
| 標籤 | 用途 | 關鍵屬性 |
| useBean | 創建/查找 Bean | id, class, scope |
| setProperty | 賦值 | name, property, value/param/* |
| getProperty | 取值輸出 | name, property |
| forward | 內部轉發 | page |
| include | 動態包含 | page, flush |
十一、EL 表達式 (${...})
- 運算符:算術、關係、邏輯、
empty、?.、[]
- 隱式對象:
param, paramValues, header, cookie, pageScope, requestScope, sessionScope, applicationScope, pageContext
- 搜索順序:page → request → session → application
十二、JSTL 核心標籤庫 (c:)
- 通用:
set, out, remove
- 流程:
if, choose/when/otherwise
- 迭代:
forEach, forTokens
十三、自定義標籤開發流程
- 標籤處理器:繼承
TagSupport (無體) 或 BodyTagSupport (有體),重寫 doStartTag/doEndTag/doAfterBody
- TLD 文件:
/WEB-INF/*.tld 描述標籤屬性、體內容類型
- JSP 引用:
<%@ taglib uri="..." prefix="..." %>
十四、Filter 過濾器
生命周期:init → doFilter → destroy
鏈式調用:FilterChain.doFilter(req, res) 傳遞給下一個過濾器或 Servlet。
十五、MVC 設計模式與 Model I/II
| 模式 | 結構 | 角色分工 |
| Model I | JSP + JavaBean | JSP 兼任 View/Controller,Bean 為 Model |
| Model II | JSP + Servlet + JavaBean | Servlet=Controller, JSP=View, Bean=Model |
| 標準 MVC | 通用架構模式 | Model(數據/業務), View(展示), Controller(流程控制) |
關係:Model II 是 MVC 在 JSP/Servlet 技術棧下的具體實現。