在JSP页面中编写Java代码是Java Web开发中的基础技能,但为了代码的可维护性和性能,需要遵循一定的规范和最佳实践,本文将详细介绍JSP中编写Java代码的几种方式、适用场景及注意事项。

脚本元素(Scripting Elements)
JSP提供了三种脚本元素,用于在页面中嵌入Java代码。
脚本片段(Scriptlet)
脚本片段是JSP中最常用的Java代码嵌入方式,语法为<% %>,在<% %>中可以编写任意有效的Java语句,这些代码会被原样插入到Servlet的_jspService()方法中。
示例:
<%
String name = "张三";
int age = 25;
out.println("姓名:" + name + ",年龄:" + age);
%>
注意事项:
- 脚本片段中的变量是局部变量,生命周期仅限于当前请求。
- 避免在脚本片段中编写复杂的业务逻辑,应尽量保持简洁。
- 多个脚本片段在编译时会按顺序合并执行。
表达式(Expression)
表达式用于输出Java表达式的值,语法为<%= %>,表达式会被编译为out.print()方法调用,最终结果输出到客户端。
示例:
<%= new java.util.Date() %>
注意事项:
- 表达式后面不能加分号,因为本质上是调用
out.print()。 - 避免在表达式中编写复杂逻辑,仅用于简单值的输出。
声明(Declaration)
声明用于定义变量或方法,语法为<!% %>,声明的内容会被插入到Servlet类的成员位置,而非方法内部。

示例:
<!%
private static int count = 0;
public static int getCount() {
return count;
}
%>
注意事项:
- 声明的变量是成员变量,所有请求共享,需注意线程安全问题。
- 声明的方法可在页面中的脚本片段中调用,但现代开发中已较少使用。
JSP动作元素(Action Elements)
JSP动作元素是XML语法,用于在运行时操作JavaBean、包含其他页面或转发请求。
使用JavaBean
通过<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>动作标签操作JavaBean。
示例:
<jsp:useBean id="user" class="com.example.User" scope="request"/> <jsp:setProperty name="user" property="name" value="李四"/> <jsp:getProperty name="user" property="name"/>
优势:
- 代码更简洁,符合MVC模式,便于维护。
- 通过
scope属性可指定Bean的作用域(page、request、session、application)。
包含和转发
<jsp:include>:动态包含其他页面,执行后合并输出。<jsp:forward>:将请求转发到其他资源,当前页面执行终止。
示例:
<jsp:include page="header.jsp"/> <jsp:forward page="login.jsp"/>
EL表达式与JSTL标签库
现代JSP开发推荐使用EL(Expression Language)表达式和JSTL(JSP Standard Tag Library)替代脚本元素,以实现逻辑与视图的分离。

EL表达式
EL语法为${expression},用于访问作用域中的变量、调用方法或进行运算。
示例:
${user.name} <!-- 访 request/session 中的 user 对象的 name 属性 -->
${1 + 2} <!-- 输出 3 -->
JSTL标签
JSTL提供了一系列标签,用于处理条件判断、循环、格式化等操作。
示例:
<c:if test="${user.age > 18}">
<p>成年人</p>
</c:if>
<c:forEach items="${list}" var="item">
<p>${item}</p>
</c:forEach>
最佳实践与注意事项
- 减少脚本元素的使用:脚本元素会使页面难以维护,优先使用EL和JSTL。
- 避免在JSP中编写复杂逻辑:业务逻辑应放在Servlet或Service层,JSP仅负责展示。
- 注意线程安全:脚本片段中的局部变量是线程安全的,但成员变量需同步处理。
- 使用注释:JSP注释
<%-- --%>不会发送到客户端,HTML注释<!-- -->会发送到客户端。 - 合理设置作用域:根据数据生命周期选择page、request、session或application作用域。
通过合理选择脚本元素、动作标签、EL表达式和JSTL,可以编写出结构清晰、易于维护的JSP页面,随着技术的发展,虽然JSP的使用场景逐渐减少,但其核心思想仍对理解Java Web开发有重要意义。




















