首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSP 核心基礎知識:本質、註解、聲明、表達式、腳本元素全解析

     編輯:Java 相關知識

JSP(JavaServer Pages)是 Servlet 的擴展,允許在 HTML 中嵌入 Java 程式碼。本文系統梳理:JSP 本質、四種註解差異、聲明元素、表達式元素、腳本元素,並附轉換後 Servlet 程式碼對照,建立正確認知模型。

JSP 是什麼?

  • 靜態部分:HTML 標籤、文字、CSS、JS,原樣輸出。
  • 動態部分:Java 程式碼片段,經容器編譯為 Servlet 執行。

JSP 本質 = Servlet。每個 .jsp 經翻譯 → .java → .class,由容器(Tomcat/Jetty)實例化執行。

為什麼用 JSP?

  1. 解決 Servlet 中大量 out.println(\"...\") 維護困難。
  2. 前後端分工:美工寫 HTML,工程師嵌入動態邏輯。
  3. 傳統企業級系統(銀行、電信、電力)仍大量使用,維護需求持續存在。

JSP 四種元素語法速查

元素語法用途轉換後 Servlet 位置
註解<%-- 註解 --%>僅伺服器端可見,不輸出到客戶端無(編譯期移除)
聲明<%! 變數/方法聲明 %>定義類成員變數、方法類別成員區域
表達式<%= 表達式 %>輸出值到頁面(自動 toString)out.print(...)
腳本<% Java 代碼 %>任意可執行語句(流程控制、呼叫方法)_jspService() 方法內

程式碼對照範例

JSP 原始碼

<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<%-- JSP 註解 --%>
<%! 
    private int counter = 0;
    String getSite() { return "https://example.com"; }
%>
<%
    for (int i = 0; i < 3; i++) {
        out.println("腳本輸出: " + i + "<br/>");
    }
%>
表達式輸出計數器:<%= ++counter %><br/>
表達式輸出字串:<%= getSite() %><br/>
表達式輸出物件:<%= this %>
</body></html>

轉換後 Servlet 關鍵片段

public final class index_jsp extends HttpJspBase {
    // 聲明區域 → 類成員
    private int counter = 0;
    public String getSite() { return "https://example.com"; }

    public void _jspService(HttpServletRequest req, HttpServletResponse resp) {
        // 腳本區域 → 方法內部
        for (int i = 0; i < 3; i++) {
            out.println("腳本輸出: " + i + "
"); } // 表達式 → out.print() out.print(++counter); out.print("
"); out.print(getSite()); out.print("
"); out.print(this); // 呼叫 toString() } }

關鍵觀念釐清

  • 聲明不在 _jspService 內:所以不能直接存取 request/response/session 等隱含物件。
  • 表達式不能以分號結尾:<%= "hello" %> 正確,<%= "hello"; %> 編譯錯誤。
  • HTML 註解 <!-- --> 會輸出到瀏覽器,查看原始碼可見;JSP 註解 <%-- --%> 則完全移除。
  • 隱含物件(request/response/out/session/application/config/page/exception/pageContext)僅在腳本/表達式中可直接使用。

現代開發建議

  1. 避免在 JSP 寫複雜 Java 邏輯:移至 Servlet/Controller/Service,JSP 僅負責顯示(${expr}、JSTL)。
  2. 啟用 EL 表達式:isELIgnored="false"(預設開啟)。
  3. 使用 JSTL 標籤庫:<c:forEach>、<c:if> 替代腳本迴圈/判斷。
  4. 前後端分離架構:新專案建議 Spring Boot + Vue/React,JSP 僅作維護模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved