一、什么是 JSP
1. 概念
JSP(Java Server Pages)是由Sun公司推出的一种动态网页开发技术,它允许在HTML页面中嵌入Java代码,运行在服务器端(依赖Tomcat等Web服务器),最终被服务器编译成Servlet,再将处理后的静态HTML页面响应给客户端浏览器。
核心区别:
静态HTML:纯标签组成,内容固定,无法动态生成数据(比如根据用户登录状态显示不同内容);
JSP:HTML + Java代码,运行在服务端,能动态拼接数据、处理业务逻辑,返回个性化的HTML页面。
简单理解:
- HTML 是纯静态页面,只能写标签,不能写 Java 代码;
- JSP =HTML + Java 代码,运行在 Tomcat 服务器,可以动态拼接页面数据。
2. 核心特点
- 兼容 HTML 标签,直接写页面布局;
- 支持嵌入 Java 代码,实现动态数据展示;
- 运行时会被 Tomcat 编译成 Servlet,本质就是 Servlet;
- 早期 Java Web 核心技术,用于前后端不分离项目。
3. JSP 基础脚本(了解即可)
- 脚本片段:
<% java代码 %>
<% String name = "张三"; int age = 20; %>- 输出表达式:
<%= 变量/数据 %>
姓名:<%= name %>- 缺点:代码混乱、Java 和 HTML 混写、维护极差,所以后面用EL + JSTL替代脚本。
二、EL 表达式 基础
1. 概念
EL(Expression Language):表达式语言,专门用来在 JSP 中快速获取域对象数据,替代<%= %>脚本。
语法超级简单:
${ 表达式 }2. 核心作用
- 从四大域中取值:
pageContext、request、session、application - 自动判空,空数据不会输出
null; - 简化对象、集合、数组取值。
3. 常用示例
- 取普通数据
<% request.setAttribute("msg","Hello JSP"); %> <!-- EL取值 --> ${msg}- 取对象属性
${user.name} ${user.age}- 运算
${10 + 20} ${age >= 18}4. 优势
- 写法简洁、无 java 硬编码;
- 自动忽略 null,页面更整洁;
- 配合 JSTL 标签使用,彻底告别 JSP 脚本。
三、JSTL 标签库 基础
1. 概念
JSTL(JSP Standard Tag Library):JSP 标准标签库,是一套自定义标签,用标签代替 Java 代码。
解决问题:JSP 页面大量 Java 代码,可读性差、难维护。
2. 使用前提
- 导入 JSTL 依赖 jar 包;
- JSP 页面头部引入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>3. 常用核心标签(c 标签)
(1)条件判断<c:if>
<c:if test="${age >= 18}"> 成年人 </c:if>(2)循环遍历<c:forEach>
遍历集合、数组,日常使用最多:
<!-- items:要遍历的集合 var:每一项变量名 --> <c:forEach items="${userList}" var="user"> <div>${user.name} -- ${user.age}</div> </c:forEach>(3)赋值、输出
<c:set var="num" value="100"/> <c:out value="${num}"/>四、三者关系(重点记忆)
- JSP:载体页面,是容器;
- EL 表达式:负责取值、运算;
- JSTL 标签:负责判断、循环、逻辑处理;
组合使用公式:
JSP 页面 = HTML 布局 + JSTL 标签 (逻辑) + EL 表达式 (取值)完全抛弃老旧 Java 脚本,页面整洁易维护。
五、完整小案例(可直接运行)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>JSP+EL+JSTL案例</title> </head> <body> <%-- 域中存数据 --%> <% request.setAttribute("name","Java学习"); %> <%-- EL取值 --%> <h3>标题:${name}</h3> <%-- JSTL 判断 --%> <c:set var="score" value="85"/> <c:if test="${score >= 60}"> <p>成绩合格</p> </c:if> </body> </html>六、总结
- JSP:动态网页技术,融合 HTML 与服务端代码;
- EL:
${}快速取值、做运算,简化页面数据获取; - JSTL:
<c:xxx>标签,实现循环、判断等业务逻辑; - 三者是Java Web 传统动态页面标配组合