2025/12/14
jsp
一、核心脚本类型
- 脚本小程序(Scriptlet)—— 业务逻辑核心
语法:<% Java代码 %>
作用:嵌入任意 Java 代码(变量定义、循环、条件判断、数据库操作、调用方法等),是 JSP 中最常用的脚本形式,运行在_jspService()方法内。
特点:局部变量作用域为当前页面请求,每次请求都会执行;可直接使用 JSP 内置对象(request、response、session 等)。
示例:
jsp
<%
// 定义局部变量
String username = request.getParameter("username");
// 条件判断
if (username == null || username.isEmpty()) {
username = "游客";
}
// 循环输出
for (int i = 1; i <= 5; i++) {
out.print("第" + i + "行
");
}
%> - 表达式脚本 —— 快速输出内容
语法:<%= 表达式 %>
作用:简化 “输出内容到页面” 的操作,等价于out.print(表达式),无需加分号结尾。
特点:直接输出表达式结果(变量、方法返回值、算术运算等),不能写完整语句,只能是单个表达式。
示例:
jsp
当前用户:<%= username %>
当前时间:<%= new java.util.Date() %>
计算结果:<%= 10 + 20 %>
3. 声明脚本 —— 定义全局成员
语法:<%! 变量/方法/类的定义 %>
作用:定义 JSP 页面的全局变量、方法或内部类,运行在 Servlet 类的成员位置(而非_jspService方法),所有请求共享。
特点:变量为类级别的成员变量(多线程共享,需注意线程安全),方法可被 Scriptlet 或表达式调用。
示例:
jsp
<%!
// 全局变量(所有请求共享)
private int visitCount = 0;
// 自定义方法
public String getWelcomeMsg(String name) {
return "欢迎你," + name + "!";
}
%>
<%
// 调用声明的方法
String msg = getWelcomeMsg(username);
// 全局变量自增(注意线程安全,实际需加锁)
visitCount++;
%>
<%= msg %>
当前访问量:<%= visitCount %>
二、常用指令标签(伪脚本,配置页面属性)
指令标签虽非 “代码脚本”,但属于 JSP 核心配置,高频使用:
1. page 指令 —— 页面全局配置
语法:<%@ page 属性名="值" %>
常用属性:
language="java":指定脚本语言(默认 Java);
contentType="text/html;charset=UTF-8":设置响应编码;
pageEncoding="UTF-8":设置页面编码;
import="java.util.*, java.sql.*":导入 Java 包(可多个,逗号分隔);
session="true/false":是否启用 session(默认 true);
errorPage="error.jsp":指定错误跳转页面。
示例:
jsp
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" import="java.util.List, java.util.ArrayList" %>
2. include 指令 —— 静态包含页面
语法:<%@ include file="文件路径" %>
作用:将其他 JSP/HTML 文件的内容静态合并到当前页面(编译期合并,生成一个 Servlet),适合复用页眉、页脚。
示例:
jsp
<%@ include file="header.jsp" %>
页面主体内容
<%@ include file="footer.jsp" %>
3. taglib 指令 —— 引入标签库
语法:<%@ taglib uri="标签库URI" prefix="前缀" %>
作用:引入 JSTL 标签库、自定义标签库,替代脚本代码(简化逻辑)。
示例(引入 JSTL 核心标签):
jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
浙公网安备 33010602011771号