【Java Web学习 | 第16篇】JSP 介绍与基本语法(2026最新版)
恭喜你完成前端 JavaScript 系列!
从 HTML、CSS、原生 JS、jQuery,一直到现在,我们终于进入 Java Web 后端页面渲染技术 —— JSP(JavaServer Pages)。
虽然在 2026 年,JSP 已不是主流(现代推荐方案是 Thymeleaf + Spring MVC 或前后端分离 + Vue/React),但 JSP 仍然是很多传统企业、老项目、教材、面试 中必须掌握的内容。理解 JSP 的工作原理,对你后续学习 Spring Boot + Thymeleaf、模板引擎、Servlet 等都有极大帮助。
1. 什么是 JSP?
JSP(JavaServer Pages) 是一种动态网页技术,它允许在 HTML 中嵌入 Java 代码,由服务器编译执行后生成最终的 HTML 返回给浏览器。
核心特点:
- JSP 本质上是 Servlet 的扩展
- 文件后缀为
.jsp - 支持在页面中直接写 Java 代码(Scriptlet)
- 支持标签库(JSTL)、EL 表达式(Expression Language)
- 开发效率高,但维护性较差(代码与视图混在一起)
工作流程:
- 客户端请求
.jsp文件 - Tomcat(或其它 Servlet 容器)将 JSP 翻译成 Servlet(
.java) - 编译成
.class文件 - 执行,生成 HTML 返回给浏览器
第一次访问 JSP 时会比较慢(需要翻译和编译),之后会直接执行编译后的 Servlet,速度很快。
2. 第一个 JSP 示例(Hello JSP)
创建一个 hello.jsp 文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个 JSP</title>
</head>
<body>
<h1>Hello JSP!欢迎来到 Java Web 学习</h1>
<%-- JSP 注释,不会发送到浏览器 --%>
<!-- HTML 注释,会发送到浏览器 -->
<h2>当前服务器时间:<%= new java.util.Date() %></h2>
<%
// Scriptlet:Java 代码块
String name = "重阳";
int age = 26;
out.println("<p>姓名:" + name + ",年龄:" + age + "</p>");
%>
</body>
</html>
把这个文件放到 webapp 目录下,启动 Tomcat,访问 http://localhost:8080/你的项目名/hello.jsp 即可看到效果。
3. JSP 基本语法(核心内容)
3.1 指令(Directive)—— 页面配置
<%-- 页面指令(最常用) --%>
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
errorPage="error.jsp"
isELIgnored="false" %>
<%-- 包含指令(静态包含) --%>
<%@ include file="header.jsp" %>
<%-- 标签库指令(JSTL) --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.2 脚本元素(Scripting Elements)
- 表达式(Expression) —— 最常用
当前时间:<%= new java.util.Date() %>
计算结果:<%= 10 + 20 * 5 %>
用户名:<%= user.getUsername() %>
- 脚本片段(Scriptlet) —— 嵌入 Java 代码
<%
String message = "欢迎学习 JSP";
for(int i = 1; i <= 5; i++) {
out.println("<p>第 " + i + " 行</p>");
}
%>
- 声明(Declaration) —— 定义成员变量和方法
<%!
private int count = 0;
public String getGreeting(String name) {
return "你好," + name + "!";
}
%>
3.3 JSP 内置对象(9 大内置对象)—— 重点记忆
| 内置对象 | 类型 | 作用说明 | 常用方法示例 |
|---|---|---|---|
| request | HttpServletRequest | 获取请求参数、请求头 | request.getParameter("name") |
| response | HttpServletResponse | 设置响应头、跳转 | response.sendRedirect() |
| session | HttpSession | 会话管理(用户登录状态) | session.setAttribute() |
| application | ServletContext | 整个应用范围(全局) | application.getRealPath() |
| out | JspWriter | 输出内容到页面 | out.println() |
| pageContext | PageContext | 页面上下文,可获取其他对象 | – |
| page | Object | 当前 JSP 页面对应的 Servlet | – |
| exception | Throwable | 错误页面中使用 | – |
| config | ServletConfig | Servlet 配置 | – |
最常用三个:request、session、out
4. EL 表达式(Expression Language)—— 强烈推荐
EL 表达式让 JSP 代码更简洁,语法 ${表达式}
${user.username} <!-- 等价于 <%= user.getUsername() %> -->
${param.username} <!-- 获取请求参数 -->
${sessionScope.loginUser} <!-- 从 session 中取值 -->
${empty list} <!-- 判断是否为空 -->
${list[0].name} <!-- 访问集合 -->
禁用 EL:在 page 指令中设置 isELIgnored="true"
5. 完整入门示例(结合 request 参数)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP + EL 示例</title>
</head>
<body>
<h1>欢迎 ${param.username == null ? "游客" : param.username} 访问</h1>
<%
String msg = (String) request.getAttribute("message");
if (msg != null) {
%>
<h2 style="color:green"><%= msg %></h2>
<% } %>
<form action="hello.jsp" method="get">
<input type="text" name="username" placeholder="输入你的名字">
<button type="submit">提交</button>
</form>
</body>
</html>
6. JSP 开发最佳实践(2026 视角)
优点:
- 学习成本低,上手快
- 适合快速原型、小型项目
- 与 Servlet 天然集成
缺点(现代不推荐原因):
- 前后端代码严重耦合,维护困难
- 不利于前后端分离
- 页面中 Java 代码过多,难以测试
现代替代方案:
- Thymeleaf(Spring Boot 官方强烈推荐)
- 前后端分离(Vue + Spring Boot REST API + Fetch/Axios)
- Freemarker、Velocity 等其他模板引擎
7. 小练习(建议立即完成)
- 创建
index.jsp,显示当前服务器时间和访问次数(用 application 统计)。 - 创建登录表单
login.jsp,提交后在另一个 JSP 中用 EL 表达式显示用户名。 - 使用 Scriptlet 循环输出 1~10 的乘法口诀表。
- 在页面中用 EL 表达式接收
?name=张三&age=25参数并显示。
下一篇文章预告:《【Java Web学习 | 第17篇】Servlet 基础与 JSP 结合使用》
我们将学习 Servlet(JSP 的底层),掌握请求处理、转发、重定向等核心概念,实现真正的动态 Web 应用。
有问题随时问:
- 想要完整 JSP + 九大内置对象示例代码?
- 需要JSP 与 Thymeleaf 语法对比?
- 或直接进入 Servlet 篇?
回复“给我完整示例”或“下一篇 Servlet”,我立刻继续!
JSP 是理解 Java Web 动态页面生成机制的重要一环,学好它能帮你更好地理解模板引擎的工作原理。继续加油,你的 Java Web 全栈之路正在稳步前进!🚀