08.JSTL
一、简介
- 全称:Jsp Standard Tag Library,jsp标准标签库,用来代替JSP中的脚本片段
- 标签库的分类
- 核心标签库
- 我们也称为c标签
- 函数标签库
- 结合EL表达式使用,可以对字符串进行截取、替换等操作
- 格式化标签库
- 主要用来进行国际化的操作
- sql标签库(淘汰)
- xml标签库(淘汰)
- 核心标签库
- 使用标签库需要导入以下jar包
- taglibs-standard-impl-1.2.5.jar
- taglibs-standard-spec-1.2.5.jar
二、核心标签库
- 使用核心标签库需要在页面中通过taglib指令引入c标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
常用的标签
- set标签
<%-- 1.set标签(分页时会用到):用来向域对象中添加属性,默认放到page域中 var属性:设置向域对象中添加属性的key value属性:设置向域对象中添加的属性值 scope属性:设置将属性值放到那个域中,可选值为page、request、session、application --%> <c:set var="hello" value="JSTL" scope="page"></c:set> <c:set var="hello" value="JSTL" scope="request"></c:set> <c:set var="hello" value="JSTL" scope="session"></c:set> <c:set var="hello" value="JSTL" scope="application"></c:set> page域中的属性值是:${pageScope.hello}<br> request域中的属性值是:${requestScope.hello}<br> session域中的属性值是:${sessionScope.hello}<br> application域中的属性值是:${applicationScope.hello}<br> <hr>
- remove标签
<%-- 2.remove标签:用来移除域对象中的属性,默认全域移除 var属性:设置要移除的域对象中属性的key scope属性:设置要移除的域,可选值为page、request、session、application --%> <c:remove var="hello" scope="session"></c:remove> page域中的属性值是:${pageScope.hello}<br> request域中的属性值是:${requestScope.hello}<br> session域中的属性值是:${sessionScope.hello}<br> application域中的属性值是:${applicationScope.hello}<br>
- if标签
<%--★1.if标签:相当于Java中的if条件判断 test属性:接受一个布尔类型的值,通常通过EL表达式获取,当值是true时才执行标签体中的内容 --%> <% int age = 18; //将age放到page域中 pageContext.setAttribute("age",age); %> <c:if test="${pageScope.age >= 18}"> 您已成年,尽情浏览,注意身体! </c:if> <c:if test="${pageScope.age < 18}"> 未成年人禁止入内! </c:if> <hr>
- choose标签
<%-- 2.choose标签(分页时会用到):相当于Java中的if...else if...else 注意: 1)when标签和otherwise标签要在choose标签中使用 2)一定要注意多个when标签的书写顺序,只要有一个when满足条件其他的就不再执行 --%> <c:choose> <c:when test="${age > 40}"> 曹孟德来了 </c:when> <c:when test="${age > 35}"> 大龄剩女 </c:when> <c:when test="${age > 20}"> 妙龄少女 </c:when> <c:when test="${age > 16}"> 花季少女 </c:when> <c:when test="${age > 11}"> 豆蔻年华 </c:when> <c:otherwise> 小屁孩儿 </c:otherwise> </c:choose>
-
forEach标签
- Servlet代码
package com.atguigu.jstl.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; @WebServlet(name = "GetStarsServlet",urlPatterns = "/GetStarsServlet") public class GetStarsServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //假设从数据库中查询到一个List List<String> stars = new ArrayList<>(); //向stars中添加明星 stars.add("李小璐"); stars.add("马蓉"); stars.add("文章"); stars.add("罗志祥"); stars.add("萧亚轩"); stars.add("比尔盖茨"); stars.add("吴秀波"); stars.add("李宗盛"); //将List放到request域中 request.setAttribute("stars",stars); //转发到显示的页面 request.getRequestDispatcher("/forEach.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
- jsp页面
<%-- Created by IntelliJ IDEA. User: 韩总 Date: 2021/5/22 Time: 15:10 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>forEach标签</title> </head> <body> <%--★forEach标签:相当于Java中的for循环 begin属性:设置循环的开始值,值必须是大于等于0的数 end属性:设置循环结束的值 var属性:设置一个变量接收遍历到的值,同时会以变量值为key放到page域中 step属性:设置步长,默认是1 --%> <c:forEach begin="1" end="10" var="index" step="2"> <a href="#">${pageScope.index}</a> </c:forEach> <hr> <%-- items属性:接收一个遍历的集合 var属性:设置一个变量接收遍历到的值,同时会以变量值为key放到page域中 --%> <c:if test="${empty requestScope.stars}"> <h1>世界很美好!</h1> </c:if> <c:if test="${!empty requestScope.stars}"> <c:forEach items="${requestScope.stars}" var="star"> <a href="#">${star}</a><br> </c:forEach> </c:if> </body> </html>