EL&JSTL
# JSP
# 1. 指令
作用:用于配置 JSP 页面,导入资源文件
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>分类:
- page:配置 JSP 页面
- contentType:等同于 response.setContentType()
- 设置响应体的 mime 类型以及字符集
- 设置当前 JSP 页面的编码(高级 IDE 生效,低级工具需设置 pageEncoding)
- import:导包
- errorPage:指定错误页面
- isErrorPage:标识当前页面是否为错误页面
- true:是,可使用内置对象 exception
- false:否(默认)
- contentType:等同于 response.setContentType()
- include:页面包含
<%@ include file="top.jsp" %>- taglib:导入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>- page:配置 JSP 页面
# 2. 注释
- HTML 注释:
<!-- 只能注释 HTML 代码片段 -->
- JSP 注释(推荐):
<%-- 可以注释所有 --%>
# 3. 内置对象(9个)
| 变量名 | 类型 | 作用 |
|---|---|---|
| pageContext | PageContext | 当前页面共享数据,可获取其他8个内置对象 |
| request | HttpServletRequest | 一次请求访问多个资源(转发) |
| session | HttpSession | 一次会话中的多个请求 |
| application | ServletContext | 所有用户间共享数据 |
| response | HttpServletResponse | 响应对象 |
| page | Object | 当前页面对象,相当于 this |
| out | JspWriter | 输出对象,输出数据到页面 |
| config | ServletConfig | Servlet 的配置对象 |
| exception | Throwable | 异常对象(仅在 isErrorPage=true 时可用) |
# MVC 开发模式
# 1. JSP 演变历史
- Serlet 初期:只能用 response 输出 HTML,非常繁琐
- JSP 出现:简化了 Servlet,但混写 Java 和 HTML 不易维护
- MVC 模式:解耦视图与控制逻辑,提升维护性和协作性
# 2. MVC 说明
- M(Model):JavaBean,处理业务逻辑
- V(View):JSP,展示数据
- C(Controller):Servlet,控制层
- 接收用户请求
- 调用模型
- 返回视图页面
优缺点:
- 优点:
- 降低耦合、便于维护、利于协作
- 可重用性高
- 缺点:
- 架构复杂、对开发者要求高
# EL 表达式(Expression Language)
# 1. 概念
- 简化 JSP 中 Java 代码的编写
- 格式:${表达式}
# 2. 忽略 EL 表达式
- 设置 isELIgnored="true" 忽略整页
- 使用 ${} 忽略单个表达式
# 3. EL 表达式使用
# 1. 运算
- 运算符:
- 算术:+ - * / (div) % (mod)
- 比较:> < >= <= == !=
- 逻辑:&& (and) || (or) ! (not)
- 空判断:empty
${empty list}
${not empty str}
# 2. 获取值
- 语法:${域.键名} 或 ${键名}(从小到大依次查找)
| 域名 | 对应对象 |
|---|---|
| pageScope | pageContext |
| requestScope | request |
| sessionScope | session |
| applicationScope | application |
- 示例:
${requestScope.name}
# 3. 获取对象或集合属性
- 对象:
${域.对象.属性}
- List 集合:
${域.list[0]}
- Map 集合:
${map.key}
${map["key"]}
# JSTL(JSP 标准标签库)
# 1. 概念
- Apache 提供的开源 JSP 标签
- 用于简化 JSP 中的 Java 代码
# 2. 使用步骤
- 导入 JSTL 所需 jar 包
- 引入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 编写标签代码
# 3. 常用标签
# 1. c:if
- 相当于 Java 的 if
- 属性:
- test:布尔表达式(结合 EL 使用)
<c:if test="${user.age > 18}">
成年人
</c:if>
没有 else,如需 else 效果可再写一个 c:if
# 2. c:choose
- 相当于 Java 的 switch 结构
- 标签组成:
- <c:choose> 开始
- <c:when> 相当于 case
- <c:otherwise> 相当于 default
# 3. c:forEach
- 相当于 Java 的 for 循环
- 用法常见于遍历集合展示表格
# 4. 示例练习
- 从 request 域中获取 User List,用 JSTL + EL 展示到 <table> 中
# 三层架构(分层设计)
表示层(界面层):
- 用户可见,包含 JSP、HTML、CSS、JS 等
业务逻辑层:
- 控制逻辑和业务判断,如 Servlet 和 Service
数据访问层:
- 与数据库交互,如 DAO、JDBC、MyBatis
# 案例:用户信息列表展示
# 1. 需求
- 实现用户信息的增删改查功能
# 2. 技术栈设计
- Servlet + JSP + MySQL
- JdbcTemplate + Druid + BeanUtils + Tomcat
# 3. 数据库设计
CREATE DATABASE day17;
USE day17;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
gender VARCHAR(5),
age INT,
address VARCHAR(32),
qq VARCHAR(20),
email VARCHAR(50)
);
# 4. 开发步骤
- 创建数据库环境
- 创建 Java Web 项目
- 导入相关 jar 包(JSTL, Druid, JdbcTemplate 等)
- 编写增删改查功能
# 5. 测试与部署
- 运行 Tomcat,测试页面功能是否完整
- 检查 JSP 页面是否正确展示数据
上次更新: 2025/07/23, 07:26:30