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

JSP 基本語法速查:指令、聲明、腳本片段、表達式、註釋與 XML 兼容寫法

     編輯:關於JSP

前言

JSP 頁面本質是 **Servlet 的模板化表示**。掌握 5 種核心語法元素,能讀懂、寫出、重構任何 JSP 頁面。JSP 1.1+ 已全面支援 XML 兼容語法,建議新項目優先使用。

五大核心語法元素對照表

類型傳統語法XML 兼容語法 (JSPX)用途編譯後 Servlet 位置
指令<%@ page ... %><jsp:directive.page ... />頁面屬性:語言、編碼、導入、Session、緩衝、錯誤頁、EL 忽略等類級別 (屬性/導入)
聲明<%! 代碼 %><jsp:declaration>代碼</jsp:declaration>類成員:字段、方法、內部類 (不推薦濫用)類體 (成員變量/方法)
腳本片段<% 代碼 %><jsp:scriptlet>代碼</jsp:scriptlet>任意 Java 語句塊:流程控制、變量賦值、邏輯計算_jspService() 方法體內
表達式<= 表達式 %><jsp:expression>表達式</jsp:expression>輸出值到響應流 (自動 toString),**不能以分號結尾**out.print(表達式)
註釋<%-- 註釋 --%><!-- jsp:comment -->註釋<!-- /jsp:comment -->**僅在編譯階段存在**,不輸出到客戶端 (區別 HTML 註釋)無 (編譯器忽略)

完整示例:從傳統到 XML 寫法

傳統 .jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
         import="java.util.*,java.text.*" 
         session="true" buffer="16kb" errorPage="error.jsp" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>JSP 語法演示</title></head>
<body>
<%! 
    // 聲明:類成員字段/方法
    private static final String GREETING = "Hello";
    public String formatDate(Date d) {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm").format(d);
    }
%>

<%
    // 腳本片段:請求處理邏輯
    String user = request.getParameter("user");
    if (user == null || user.trim().isEmpty()) {
        user = "Guest";
    }
    Date now = new Date();
%>

<h1><%= GREETING %>, <%= user %>!</h1>
<p>當前時間: <%= formatDate(now) %></p>

<%-- 
    JSP 註釋:客戶端完全看不見 
    可包含任意字符,甚至 <% @ %> 
--%>

<!-- HTML 註釋:客戶端可見 -->
</body>
</html>

XML 兼容 .jspx (推薦新項目)

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root xmlns:jsp="https://java.sun.com/JSP/Page" version="2.1"
          xmlns:c="https://java.sun.com/jsp/jstl/core">
    <jsp:directive.page language="java" contentType="text/html; charset=UTF-8"
        import="java.util.*,java.text.*" session="true" buffer="16kb" 
        errorPage="error.jsp" isELIgnored="false"/>
    
    <jsp:declaration>
    private static final String GREETING = "Hello";
    public String formatDate(Date d) {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm").format(d);
    }
    </jsp:declaration>
    
    <html xmlns="https://www.w3.org/1999/xhtml">
    <head><title>JSPX 語法演示</title></head>
    <body>
        <jsp:scriptlet>
        String user = request.getParameter("user");
        if (user == null || user.trim().isEmpty()) {
            user = "Guest";
        }
        Date now = new Date();
        </jsp:scriptlet>
        
        <h1><jsp:expression>GREETING + ", " + user + "!"</jsp:expression></h1>
        <p>當前時間: <jsp:expression>formatDate(now)</jsp:expression></p>
        
        <!-- jsp:comment -->
        JSP 註釋:客戶端不可見
        <!-- /jsp:comment -->
        
        <!-- HTML 註釋 -->
    </body>
    </html>
</jsp:root>

隱含對象 (腳本片段/表達式中直接可用)

對象類型作用域用途
requestHttpServletRequest請求參數、頭部、屬性、轉發
responseHttpServletResponse頁面狀態、頭部、Cookie、重定向
outJspWriter頁面輸出響應體 (緩衝)
sessionHttpSession會話用戶狀態、屬性 (需 page 指令 session="true")
applicationServletContext應用全局配置、資源、屬性
configServletConfig頁面初始化參數
pageContextPageContext頁面統一作用域訪問、轉發、包含
pageObject (this)頁面當前 Servlet 實例引用
exceptionThrowable錯誤頁異常對象 (需 isErrorPage="true")

最佳實踐原則 (2024+)

  1. 零 Scriptlet:業務邏輯移至 Controller/Service/Bean,JSP 僅用 EL/JSTL/標簽庫。
  2. 零聲明:工具方法放入獨立工具類或 Bean,JSP 不寫 <%! %>。
  3. 表達式僅輸出簡單值:複雜格式化用 JSTL <fmt:formatDate> / EL 函數。
  4. 優先 .jspx:XML 結構利於 IDE 驗證、重構、模板引擎兼容。
  5. 編碼統一 UTF-8:pageEncoding="UTF-8" + contentType="text/html; charset=UTF-8"。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved