1. JSTL 的概念
JSTL(JavaServer Pages Tag Library),JSP 标准标签库,它是由 Apache 组织提供的开源免费的 JSP 标签库
2. JSTL 的作用
它可以替换 JSP 页面中 Java 代码的编写,从而简化 JSP 页面
3. JSTL 的使用步骤
-
导入 JSTL 的 jar 包,右键 Add as Library
- javax.servlet.jsp.jstl.jar
- jstl-impl.jar
-
引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
使用标签
4. JSTL 的常见标签
-
if(相当于 Java 代码的 if 语句)
<c:if test=""></c:if>
- 属性
- test:必须的属性,接受 boolean 表达式
- 如果表达式为 true,则显示 if 标签体内容,如果为 false,则不显示标签体内容
- 一般情况下,test 属性值会结合 EL 表达式一起使用
- test:必须的属性,接受 boolean 表达式
- 注意
- if 标签没有 else 情况,想要 else 情况,则要再定义一个 if 标签
- 属性
-
choose(相当于 Java 代码的 Switch 语句)
<c:choose> <c:when test=""></c:when> <c:when test=""></c:when> <c:when test=""></c:when> <c:otherwise></c:otherwise> </c:choose>
下面做一个数字编号对应星期几案例练习:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>choose 标签</title> </head> <body> <%-- 完成数字编号对应星期几案例 1.域中存储一数字 2.使用choose标签取出数字(相当于switch声明) 3.使用when标签做数字判断(相当于case) 4.otherwise标签做其他情况的声明(相当于default) --%> <% request.setAttribute("number",5); %> <c:choose> <c:when test="${number == 1}">星期一</c:when> <c:when test="${number == 2}">星期二</c:when> <c:when test="${number == 3}">星期三</c:when> <c:when test="${number == 4}">星期四</c:when> <c:when test="${number == 5}">星期五</c:when> <c:when test="${number == 6}">星期六</c:when> <c:when test="${number == 7}">星期天</c:when> <c:otherwise>数字输入有误</c:otherwise> </c:choose> </body> </html>
-
foreach(相当于 Java 代码的 for 语句)
-
重复完成的操作
<c:forEach begin="1" end="10" step="1" var="i"> ${i}<br> </c:forEach> <%-- 上面等价于 for (int i = 1; i <= 10; i++) { System.out.println(i); } --%>
- 属性
- begin:开始值
- end:结束值
- var:临时变量
- step:步长
- 属性
-
遍历容器
<c:forEach items="${list}" var="s" > ${s}<br> </c:forEach> <%-- 上面等价于 for (String s : list) { System.out.println(s); } --%>
- 属性
- items:容器对象
- var:容器中元素的临时变量
- varStatus:循环状态对象
- index:容器中元素的索引,从0开始
- count:循环次数,从1开始
- 属性
-
5. JSTL 的练习
-
需求分析
在 request 域中有一个存有 User 对象的 List 集合。需要使用 JSTL 和 EL 表达式将 List 集合数据展示到 JSP 页面的表格中
-
效果展示
-
编码实现
User 类:
package com.zt.domain; import java.text.SimpleDateFormat; import java.util.Date; public class User { private String name; private int age; private Date birthday; public User(String name, int age, Date birthday) { this.name = name; this.age = age; this.birthday = birthday; } public User() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } /** * 逻辑视图 * @return */ public String getBirStr(){ if(birthday != null){ //1.格式化日期对象 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2.返回字符串即可 return simpleDateFormat.format(birthday); }else{ return ""; } } }
user.jsp:
<%@ page import="java.util.ArrayList" %> <%@ page import="com.zt.domain.User" %> <%@ page import="java.util.Date" %> <%@ 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> <% ArrayList<User> users = new ArrayList<>(); users.add(new User("张三",18,new Date())); users.add(new User("李四",19,new Date())); users.add(new User("王五",20,new Date())); request.setAttribute("users",users); %> <table border="1"> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>生日</th> </tr> <c:forEach items="${users}" var="user" varStatus="s"> <tr> <td>${s.count}</td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.birStr}</td> </tr> </c:forEach> </table> </body> </html>