【JavaWeb 学习 | 第16篇】JPS介绍和基本语法

【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)
  • 开发效率高,但维护性较差(代码与视图混在一起)

工作流程

  1. 客户端请求 .jsp 文件
  2. Tomcat(或其它 Servlet 容器)将 JSP 翻译成 Servlet(.java
  3. 编译成 .class 文件
  4. 执行,生成 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)

  1. 表达式(Expression) —— 最常用
   当前时间:<%= new java.util.Date() %>
   计算结果:<%= 10 + 20 * 5 %>
   用户名:<%= user.getUsername() %>
  1. 脚本片段(Scriptlet) —— 嵌入 Java 代码
   <%
       String message = "欢迎学习 JSP";
       for(int i = 1; i <= 5; i++) {
           out.println("<p>第 " + i + " 行</p>");
       }
   %>
  1. 声明(Declaration) —— 定义成员变量和方法
   <%!
       private int count = 0;

       public String getGreeting(String name) {
           return "你好," + name + "!";
       }
   %>

3.3 JSP 内置对象(9 大内置对象)—— 重点记忆

内置对象类型作用说明常用方法示例
requestHttpServletRequest获取请求参数、请求头request.getParameter("name")
responseHttpServletResponse设置响应头、跳转response.sendRedirect()
sessionHttpSession会话管理(用户登录状态)session.setAttribute()
applicationServletContext整个应用范围(全局)application.getRealPath()
outJspWriter输出内容到页面out.println()
pageContextPageContext页面上下文,可获取其他对象
pageObject当前 JSP 页面对应的 Servlet
exceptionThrowable错误页面中使用
configServletConfigServlet 配置

最常用三个requestsessionout

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. 小练习(建议立即完成)

  1. 创建 index.jsp,显示当前服务器时间和访问次数(用 application 统计)。
  2. 创建登录表单 login.jsp,提交后在另一个 JSP 中用 EL 表达式显示用户名。
  3. 使用 Scriptlet 循环输出 1~10 的乘法口诀表。
  4. 在页面中用 EL 表达式接收 ?name=张三&age=25 参数并显示。

下一篇文章预告:《【Java Web学习 | 第17篇】Servlet 基础与 JSP 结合使用》

我们将学习 Servlet(JSP 的底层),掌握请求处理、转发、重定向等核心概念,实现真正的动态 Web 应用。


有问题随时问:

  • 想要完整 JSP + 九大内置对象示例代码?
  • 需要JSP 与 Thymeleaf 语法对比
  • 或直接进入 Servlet 篇?

回复“给我完整示例”或“下一篇 Servlet”,我立刻继续!

JSP 是理解 Java Web 动态页面生成机制的重要一环,学好它能帮你更好地理解模板引擎的工作原理。继续加油,你的 Java Web 全栈之路正在稳步前进!🚀

文章已创建 5288

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部