JSTL是什么?

  JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍历map或者集合、条件测试、XML处理,甚至数据库访问和数据操作等常见的问题。

安装
  将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下并添加至环境变量。
  然后在IDEA中加入tld约束文件: 

  JavaWeb:JSTL  JSTL_标签

  JavaWeb:JSTL  JSTL_下载地址_02
  同样的操作加入其余四个tld约束文件:

区域URI前缀
XMLhttp://java.sun.com/jsp/jstl/xmlx
国际化http://java.sun.com/jsp/jstl/fmtfmt
数据库http://java.sun.com/jsp/jstl/sqlsql
函数http://java.sun.com/jsp/jstl/functionsfn


JSP中使用JSTL

  在JSP页面中引用JSTL库,必须在在JSP页面的开头做以下声明:

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
  <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml">
  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt">
  <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql">
  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions">

说明:

  前缀可以使任意的,但是为了更加规范,建议采用如此简写形式。

一般行为

<c:out>标签

说明:
  out标签可以将一个表达式的结果打印到网页上,这个表达式可以是基于<%=?%>的传统形式,也可以是EL表达式
演示:

JavaWeb:JSTL  JSTL_下载地址_03

 1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4   <head> 5     <title>$Title$</title> 6   </head> 7   <body> 8     <%--默认值有两种表示方式--%>10     <c:out value="${param.username}">11       默认值12     </c:out>13     14     <c:out value="${param.username}" default="默认值"/>15   </body>16 </html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_标签_05

<c:set>标签

说明:
  set标签具有以下三个作用:
  1.为String类型的命名变量设定值。
  2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。
  3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。
演示: 
  1.为String类型的命名变量设定值。

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <c:set var="命名变量的名字" value="哈哈哈" scope="session"/>
    <c:set var="user" value="Tom" scope="session"/>
    <c:out value="${sessionScope.user}" default="unknow"/></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_数据库访问_08


  2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><jsp:useBean id="product" scope="session" class="domain.Product"/><html><head>
    <title>Title</title></head><body>
    <c:set target="${product}" property="name" value="白象方便面"/>
    <c:out value="${product.name}" default="unknow"/></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_标签_11

  3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/><html><head>
    <title>Title</title></head><body>
    <c:set target="${hashmap}" property="1" value="Monday"/>
    <c:set target="${hashmap}" property="2" value="Tuesday"/>
    <c:set target="${hashmap}" property="3" value="Wednesday"/>
    <c:out value="${hashmap.get('1')}" default="unknow"/></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_下载地址_14

<c:remove>标签

说明:
  reomve标签用于删除特定范围内的命名变量。
演示:

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/><html><head>
    <title>Title</title></head><body>
    <c:set target="${hashmap}" property="1" value="Monday"/>
    <c:remove var="hashmap" scope="request"/>
    <c:out value="${hashmap.get('1')}" default="unknow"/></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_下载地址_17

条件行为

<c:if>标签

说明:
  用于实现Java语言中的if语句的功能。
演示:

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%--测试结果将保存在result变量中--%>
    <c:if test="${param.username=='Tom'}" var="result" scope="request">
        <%--如果测试成功,则会输出true--%>
        <c:out value="${result}"/>
    </c:if></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_数据库访问_20

<c:choose>、<c:when>、<c:otherwise>

说明:
  <c:choose>、<c:when>、<c:otherwise>三个标签一起连用,可以实现Java语言中的if-else语句的功能。
演示:

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body><c:choose>
    <c:when test="${empty param.username}">
        Noknown user    </c:when>
    <c:when test="${param.username=='Tom'}">
        Tom    </c:when>
    <c:otherwise>
        Other    </c:otherwise></c:choose></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_下载地址_23

迭代标签

<c:forEach标签>

说明:
  forEach标签用于遍历集合中的对象,并且能重复执行标签主体。
演示:
  
1.基本用法:

JavaWeb:JSTL  JSTL_下载地址_03

<%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序设计");
        books.add("Java程序设计");
        books.add("JSP程序设计");    %>
    <c:forEach var="book" items="<%=books%>">
        ${book} &nbsp;
    </c:forEach></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_数据库访问_26

  2.foreach的varStatus属性
  varStatus属性用于设定一个LoopTagStatus类型的命名变量,它位于NESTED范围,这个命名变量包含了从集合中取出的当前元素的状态信息。
   count 当前元素在集合中的序号,从1开始计数。
   index 当前元素在集合中的索引,从0开始计数。
   first 当前元素是否时集合中的第一个元素
   last 当前元素是否是集合中的最后一个元素

JavaWeb:JSTL  JSTL_下载地址_03

<%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序设计");
        books.add("Java程序设计");
        books.add("JSP程序设计");    %>
    <c:forEach var="book" items="<%=books%>" varStatus="status">
       ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
    </c:forEach></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_下载地址_29

  3.begin、end、step
  begin、end、step分别指定循环的起始索引、结束索引和步长。

JavaWeb:JSTL  JSTL_下载地址_03

<%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%
        List books = new ArrayList();
        books.add("JavaWeb程序设计");
        books.add("Java程序设计");
        books.add("JSP程序设计");    %>
    <c:forEach var="book" items="<%=books%>" varStatus="status" begin="1" end="2" step="1">
       ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
    </c:forEach></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_标签_32
  
4.可以遍历的集合
 
 forEach可以遍历的集合包括:
   Set、List、Map、Iterator、Enumeration接口的实现类。

JavaWeb:JSTL  JSTL_下载地址_03

<%@ page import="java.util.HashMap" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%
        HashMap hashMap = new HashMap();
        hashMap.put("one","Monday");
        hashMap.put("two","Tuesday");
        hashMap.put("three","Wednesday");    %>
    <c:forEach var="week" items="<%=hashMap%>">
      ${week.key} &nbsp;${week.value}<br>
    </c:forEach></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_标签_35

Java数组
以逗号隔开的字符串

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%String names = "Tom,Mike,Juice";    %>
    <c:forEach var="name" items="<%=names%>">
        ${name}<br>
    </c:forEach></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_下载地址_38

<c:forTokens>标签

说明:
  forTokens标签用于遍历字符串中用特定分隔符分割的子字符串,并且能重复执行标签主体。
演示:

JavaWeb:JSTL  JSTL_下载地址_03

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>
    <title>Title</title></head><body>
    <%String names = "Tom|Mike|Juice";    %>
    <c:forTokens var="name" items="<%=names%>" delims="|">
        ${name}<br>
    </c:forTokens></body></html>

JavaWeb:JSTL  JSTL_下载地址_03

JavaWeb:JSTL  JSTL_数据库访问_41