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

JSP 基礎語法完整指南:指令、腳本、表達式、聲明與生命週期

     編輯:Java 綜合教學

JSP 基礎語法完整指南:指令、腳本、表達式、聲明與生命週期

JSP(Jakarta Server Pages)是 Servlet 技術的延伸,允許在 HTML 中嵌入 Java 程式碼。掌握核心語法元素與生命週期,是開發動態網頁的基石。

一、JSP 頁面元素構成

JSP 頁面由以下六大元素組成:

  • 指令:頁面層級設定(page、include、taglib)
  • 註解:JSP 專用與 HTML 註解
  • 靜態內容:HTML、CSS、JS 等純文字
  • 表達式:<%= ... %> 輸出值
  • 小腳本:<% ... %> 執行 Java 陳述式
  • 聲明:<%! ... %> 宣告成員變數/方法

二、JSP 指令

1. page 指令

通常置於頁面頂端,同一頁可有多個。常用屬性:

屬性說明範例
language腳本語言(預設 java)language="java"
contentType回應 MIME 型別與編碼contentType="text/html;charset=UTF-8"
pageEncodingJSP 檔案本身編碼pageEncoding="UTF-8"
import匯入 Java 套件/類別import="java.util.*,java.sql.*"
session是否啟用 session 物件session="true"
errorPage例外導向錯誤頁errorPage="/error.jsp"
isErrorPage宣告此頁為錯誤處理頁isErrorPage="true"
autoFlush緩衝區滿時自動刷新autoFlush="true"
buffer緩衝區大小buffer="8kb"
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>

2. include 指令

靜態包含:編譯階段將目標檔案內容合併進當前 JSP,會解析目標檔中的 JSP 語法。

<%@ include file="/common/header.jsp" %>

與 <jsp:include> 動態包含(請求階段合併輸出)不同。

3. taglib 指令

引入標籤庫(如 JSTL),定義標籤前綴。

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>

三、JSP 註解

類型語法客戶端可見性用途
HTML 註解<-- 內容 -->✅ 可見(檢視原始碼)前端說明、暫時隱藏區塊
JSP 註解<%-- 內容 --%>❌ 不可見(編譯移除)伺服器端邏輯說明、隱藏敏感資訊
腳本註解// 單行 / /* 多行 */❌ 不可見Java 程式碼內部註解

四、JSP 腳本

在頁面中執行 Java 陳述式,可包含多行,每行以分號結尾。

<%
    String name = request.getParameter("name");
    out.println("Hello, " + name);
%>

注意:腳本內變數為區域變數,轉譯為 Servlet 的 _jspService() 方法內部變數,執行緒不安全。

五、JSP 聲明

宣告類別層級成員(欄位、方法、內部類別),不輸出內容。轉譯為 Servlet 類別的成員。

<%!
    private int counter = 0;
    public int getCounter() { return ++counter; }
%>

警告:聲明的成員為 Servlet 實例變數,多執行緒共享,非執行緒安全,避免用於可變狀態。

六、JSP 表達式

輸出值到回應流,不以分號結尾,內容會被轉為 out.print(...)。

目前時間:<%= new java.util.Date() %>
用戶名:<%= request.getParameter("username") %>

七、JSP 生命週期

JSP 實際上會被容器翻譯為 Servlet,生命週期與 Servlet 一致,分四階段:

  1. 編譯階段:
    • 解析 JSP → 產生 Servlet 原始碼 → 編譯為 .class。
    • 觸發時機:首次請求、檔案修改後重新請求、容器啟動預編譯。
  2. 初始化階段:
    • 容器載入 Servlet 類別、實例化、呼叫 jspInit()。
    • 可覆寫 jspInit() 執行一次性初始化(如資料庫連線池、載入配置)。
  3. 執行階段:
    • 每個請求呼叫 _jspService(request, response)。
    • 處理請求參數、執行腳本/表達式、產生動態內容。
    • 此階段持續到 JSP 被銷毀。
  4. 清理/銷毀階段:
    • 容器卸載 JSP 前呼叫 jspDestroy()。
    • 覆寫 jspDestroy() 釋放資源(關閉連線、檔案、執行緒池)。

八、最佳實踐提醒

  • 盡量減少腳本/聲明使用:改用 JSTL、EL 表達式、自訂標籤、MVC 架構(Controller + Service + JSP View)。
  • page 指令統一放在檔案最頂端,避免編碼衝突。
  • 錯誤頁面機制:設定 errorPage 與 isErrorPage,集中處理例外。
  • 緩衝區調整:大量資料輸出時增大 buffer、關閉 autoFlush 提升效能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved