早期 Servlet 中混合大量 HTML,導致頁面邏輯耦合,前後端無法並行開發。Sun 推出 JSP 實現視圖與控制分離,提升開發效率。
訪問 index.jsp 時,容器(Tomcat)將其編譯為 index_jsp.java(繼承 HttpJspBase),再編譯為 class 執行。
關鍵方法對應:
_jspInit() → init()_jspService() → service()_jspDestroy() → destroy()靜態 HTML 被轉為 out.write(),動態腳本直接嵌入 Java 代碼。

page:定義頁面屬性(language、contentType、pageEncoding、import、isELIgnored、session、errorPage、buffer 等)include:靜態包含文件(編譯階段合併),支持 html、jsp、文本、代碼片段taglib:引入自定義標簽庫<%! int i=1; %>:類成員變量/方法,注意線程安全<% out.print(i); %>:請求處理期執行的 Java 代碼<%= "張三" %>:輸出值到響應流,無分號jsp:useBean、jsp:setProperty、jsp:getProperty:JavaBean 操作jsp:forward、jsp:include:頁面跳轉/包含| 對象 | 類型 | 說明 |
|---|---|---|
| request | HttpServletRequest | 請求域 |
| response | HttpServletResponse | 響應域 |
| out | JspWriter | 輸出流 |
| page | Object | 當前 Servlet 實例 |
| pageContext | PageContext | 頁面上下文,訪問所有屬性 |
| application | ServletContext | 應用域 |
| config | ServletConfig | 配置對象 |
| session | HttpSession | 會話域 |
| exception | Throwable | 異常對象(錯誤頁可用) |
page:僅當前頁有效request:一次請求鏈有效session:用戶會話期間有效application:整個 Web 應用生命周期有效