JSP 语法

脚本元素、表达式、声明、注释,以及为什么现在推荐 EL 与 JSTL。

Beginner
Key PointsJSP 有五种语法元素:注释、指令、脚本片段、表达式、声明;现代写法只用指令 + EL + JSTL。

五种元素

SyntaxNamePurpose
<%-- --%>Comment不发送到浏览器
<%@ %>Directive页面级设置、包含、标签库
<% %>Scriptlet任意 Java 语句
<%= %>Expression输出一个值,不加分号
<%! %>Declaration类的成员变量与方法

脚本片段

JSP
<%
    String[] langs = {"Java", "Go", "Rust"};
    int total = 0;
    for (String s : langs) {
        total += s.length();
    }
%>
<p>共 <%= langs.length %> 门语言,名称总长 <%= total %></p>
Output
共 3 门语言,名称总长 12

表达式

JSP
<%= "abc".toUpperCase() %>
<%= 10 / 3.0 %>
<%= new java.util.Date() %>
Output
ABC
3.3333333333333335
Tue Nov 03 14:25:09 CST 2026

An expression takes no semicolon and no if/for statements. It becomes out.print(expr), so anything that yields a value works.

声明

JSP
<%!
    private static final int MAX = 100;

    private String repeat(String s, int n) {
        return s.repeat(n);
    }
%>
<p><%= repeat("-", 10) %></p>
<p>上限 <%= MAX %></p>
Output
----------
上限 100

三种注释

JSP
<%-- JSP 注释:不翻译,不出现在响应里 --%>

<!-- HTML 注释:会发到浏览器,用户查看源码可见 -->

<% // Java 单行注释:只在脚本片段内有效
   /* 多行注释 */
%>
<%-- --%> is the only real comment. Wrapping Java in <!-- --> breaks: the <%= %> inside still executes and the result is visible to users.

为什么现在少用脚本

EL + JSTL
ReadabilityJava 与 HTML 混杂标签即语义
Null safety要手动判 null${empty x} 天然安全
Testability逻辑埋在页面里逻辑回到 Java
Escaping手写转义,容易漏<c:out> 默认转义
JSP
<%-- 旧写法:空值会输出 null,还容易漏转义 --%>
<p>用户名:<%= user.getName() %></p>

<%-- 新写法:空值输出空串,默认 HTML 转义 --%>
<p>用户名:<c:out value="${user.name}"/></p>

Friends & Partners