今日目标:
- 理解 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>