今日目标:
- 理解 JSP 及 JSP 原理
- 能在 JSP中使用
EL表达式和JSTL标签- 理解
MVC模式和三层架构- 能完成品牌数据的增删改查功能
JSP标准标签库(Jsp Standarded Tag Library) ,使用标签取代JSP页面上的Java代码。如下代码就是JSTL标签
xxxxxxxxxx
<c:if test="${flag == 1}"> 男</c:if><c:if test="${flag == 2}"> 女</c:if>
上面代码看起来是不是比 JSP 中嵌套 Java 代码看起来舒服好了。而且前端工程师对标签是特别敏感的,他们看到这段代码是能看懂的。
JSTL 提供了很多标签,如下图

我们只对两个最常用的标签进行讲解,<c:forEach> 标签和 <c:if> 标签。
JSTL 使用也是比较简单的,分为如下步骤:
导入坐标
xxxxxxxxxx
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version></dependency><dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version></dependency>
在JSP页面上引入JSTL标签库
xxxxxxxxxx
<% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用标签
<c:if>:相当于 if 判断
xxxxxxxxxx
<c:if test="${flag == 1}"> 男</c:if><c:if test="${flag == 2}"> 女</c:if>
代码演示:
定义一个 servlet ,在该 servlet 中向 request 域对象中添加 键是 status ,值为 1 的数据
xxxxxxxxxx
("/demo2")public class ServletDemo2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1. 存储数据到request域中 request.setAttribute("status",1); //2. 转发到 jstl-if.jsp 数据request.getRequestDispatcher("/jstl-if.jsp").forward(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
定义 jstl-if.jsp 页面,在该页面使用 <c:if> 标签
xxxxxxxxxx
<% page contentType="text/html;charset=UTF-8" language="java" %><% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html><head> <title>Title</title></head><body> <%-- c:if:来完成逻辑判断,替换java if else --%> <c:if test="${status ==1}"> 启用 </c:if> <c:if test="${status ==0}"> 禁用 </c:if></body></html>
==注意:== 在该页面已经要引入 JSTL核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach>:相当于 for 循环。java中有增强for循环和普通for循环,JSTL 中的 <c:forEach> 也有两种用法
类似于 Java 中的增强for循环。涉及到的 <c:forEach> 中的属性如下
如下代码,是从域对象中获取名为 brands 数据,该数据是一个集合;遍历遍历,并给该集合中的每一个元素起名为 brand,是 Brand对象。在循环里面使用 EL表达式获取每一个Brand对象的属性值
xxxxxxxxxx
<c:forEach items="${brands}" var="brand"> <tr align="center"> <td>${brand.id}</td> <td>${brand.brandName}</td> <td>${brand.companyName}</td> <td>${brand.description}</td> </tr></c:forEach>
代码演示:
servlet 还是使用之前的名为 ServletDemo1 。
定义名为 jstl-foreach.jsp 页面,内容如下:
xxxxxxxxxx
<% page contentType="text/html;charset=UTF-8" language="java" %><% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><input type="button" value="新增"><br><hr><table border="1" cellspacing="0" width="800"> <tr> <th>序号</th> <th>品牌名称</th> <th>企业名称</th> <th>排序</th> <th>品牌介绍</th> <th>状态</th> <th>操作</th> </tr> <c:forEach items="${brands}" var="brand" varStatus="status"> <tr align="center"> <%--<td>${brand.id}</td>--%> <td>${status.count}</td> <td>${brand.brandName}</td> <td>${brand.companyName}</td> <td>${brand.ordered}</td> <td>${brand.description}</td> <c:if test="${brand.status == 1}"> <td>启用</td> </c:if> <c:if test="${brand.status != 1}"> <td>禁用</td> </c:if> <td><a href="#">修改</a> <a href="#">删除</a></td> </tr> </c:forEach></table></body></html>
类似于 Java 中的普通for循环。涉及到的 <c:forEach> 中的属性如下
实例代码:
从0循环到10,变量名是 i ,每次自增1
xxxxxxxxxx
<c:forEach begin="0" end="10" step="1" var="i"> ${i}</c:forEach>