JSTL标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSTL标签相关的知识,希望对你有一定的参考价值。

参考技术A 根据功能可以分为五大类:

1、核心标签

2、格式化标签

3、SQL 标签

4、XML 标签

5、JSTL 函数

一、核心标签

 1、<c:out />标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。

<c:out>标签有如下属性:

 scope 的作用域大小依次为:

application > session > request > page(默认)

jsp 处理变量的作用域先后依次为:

page(默认) -> request -> session -> application

2、<c:set>标签用于设置变量值和对象属性。

3、<c:remove>标签用于移除一个变量。

4、<c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。

5、<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。

<c:when>标签的属性如下:

6、<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。

<c:import>标签有如下属性:

7、<c:forEach>标签用作迭代一个集合中的对象。

语法格式:

<c:forTokens

    items="<string>"

    delims="<string>"

    begin="<int>"

    end="<int>"

    step="<int>"

    var="<string>"

    varStatus="<string>">

<c:forEach>标签有如下属性:

c:forEach varStatus 属性

  current : 当前这次迭代的(集合中的)项

  index : 当前这次迭代从 0 开始的迭代索引

  count : 当前这次迭代从 1 开始的迭代计数

  first : 用来表明当前这轮迭代是否为第一次迭代的标志

  last : 用来表明当前这轮迭代是否为最后一次迭代的标志

  begin : 属性值

  end : 属性值

  step : 属性值

例如:

<c:foreach  items="$sessionScope.userList"  var="userItem"  begin="1"  end="10"  step="3"  varStatus="userStatus"> XXX </c:foreach>

实例解读:  对 session 对象存储的 userList 集合对象进行遍历,每次访问的项暂时存储在 userItem 变量中,从索引 1 开始至索引 10 进行访问,但不是依次访问,每隔 3 个元素访问一次。每次访问项的状态相关值由 userStatus 对象暂存。

<c:foreach> 的 varStatus 属性暂存项的相关状态属性,可由 EL 表达式引用。

$userStatus.index 此项的索引,从0开始

$userStatus.count 此项的计数序号,从1开始

$userStatus.first 此项是否是第一项,布尔值

$userStatus.last 此项是否是最后一项,布尔值

$userStatus.begin 此次迭代的起始索引,对应<c:foreach>中begin属性值

$userStatus.end 此次迭代的终止索引,对应<c:foreach>中end属性值

$userStatus.step 此次迭代的跳跃步伐,对应<c:foreach>中step属性值 

8、<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

<c:forTokens

    items="<string>"

    delims="<string>"

    begin="<int>"

    end="<int>"

    step="<int>"

    var="<string>"

    varStatus="<string>">

9、<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

这个标签在需要的时候会自动重写URL。

var属性用于存储格式化后的URL。

<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。

<c:url>标签有如下属性:

10、<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。

在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。

语法格式:

<c:param name="<string>" value="<string>"/>

<c:param>标签有如下属性:

11、<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。

c:redirect标签有如下属性:

二、格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

<%@ taglib prefix="fmt uri="http://java.sun.com/jsp/jstl/fmt" %>

1、<fmt:formatNumber>标签,<fmt:formatNumber>标签用于格式化数字,百分比,货币。

语法格式:

<fmt:formatNumber

  value="<string>"

  type="<string>"

  pattern="<string>"

  currencyCode="<string>"

  currencySymbol="<string>"

  groupingUsed="<string>"

  maxIntegerDigits="<string>"

  minIntegerDigits="<string>"

  maxFractionDigits="<string>"

  minFractionDigits="<string>"

  var="<string>"

  scope="<string>"/>

fmt:formatNumber>标签有如下属性:

如果type属性为percent或number,那么您就可以使用其它几个格式化数字属性。maxIntegerDigits属性和minIntegerDigits属性允许您指定整数的长度。若实际数字超过了maxIntegerDigits所指定的最大值,则数字将会被截断。

有一些属性允许您指定小数点后的位数。minFractionalDigits属性和maxFractionalDigits属性允许您指定小数点后的位数。若实际的数字超出了所指定的范围,则这个数字会被截断。

数字分组可以用来在每三个数字中插入一个逗号。groupingIsUsed属性用来指定是否使用数字分组。当与minIntegerDigits属性一同使用时,就必须要很小心地来获取预期的结果了。

您或许会使用pattern属性。这个属性可以让您在对数字编码时包含指定的字符。接下来的表格中列出了这些字符。

2、<fmt:formatDate>标签用于使用不同的方式格式化日期。

语法格式

语法格式

<fmt:formatDate

  value="<string>"

  type="<string>"

  dateStyle="<string>"

  timeStyle="<string>"

  pattern="<string>"

  timeZone="<string>"

  var="<string>"

  scope="<string>"/>

<fmt:formatDate>标签有如下属性:

<fmt:formatDate> 标签格式模式:

三、JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn"uri="http://java.sun.com/jsp/jstl/functions" %>

1、fn:contains()函数用于确定一个字符串是否包含指定的子串

<c:if test="$fn:contains(<原始字符串>, <要查找的子字符串>)">

...</c:if>

JSTL核心标签详解

1、什么是JSTL标签

  • JSTL是java中的一个定制标记库集合。
  • JSP标签库(JSTL)是一个JSP标签库集合,它封装了JSP应用的通用核心功能。
  • 根据JSTL标签所提供的的功能,可将其分为5个类别:

    核心标签
    格式化标签
    SQL 标签
    XML标签
    JSTL函数

2、JSTl环境搭建

  • 下载jstl的jar包(导入到项目中)

    从Apache的标准标签库中下载的二进制包(jakarta-taglibs-standard-current.zip)。
    下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

  • 如果是maven管理工程(只需引入相关依赖机会自动下载)
    #mvnrepository中的jstl依赖地址
    https://mvnrepository.com/artifact/jstl/jstl/1.2
    
  • 此处我们以maven依赖为例
    <!-- https://mvnrepository.com/artifact/jstl/jstl -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
  • 在JSP页面引入jar包
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

3、为什么要使用JSTL标签

  • 实现JSP页面代码的复用

    基于标签库原理,重复率较高的代码支持复用,提高效率。

  • 书写JSP页面的可读性强

    长得很像XML,方便前端检查和参与修改。

  • 举个简单的例子说明为什么要使用JSTL标签

  • 利用JSP编写的login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <form action="login.jsp" method="post">
        <input type="text" name="user" value="${param.user}" />
        <input type="submit" value="提交" />
    </form>
    
    <%
        if(request.getParameter("user") != null){
            if(request.getParameter("user").equals("user")){%>
                "欢迎用户"
         <% }else if(request.getParameter("user").equals("admin")){ %>
                "欢迎管理员"
          <%}
    }%>
    
    </body>
    </html>
    
  • 利用JSTL标签编写的login.jsp

    <%@ 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>
    <form action="app3.jsp" method="post">
        <input type="text" name="user" value="${param.user}" />
        <input type="submit" value="提交" />
    </form>
    
    <c:if test="${param.user == 'user'}">
        <c:out value="欢迎用户"></c:out>
    </c:if>
    <c:if test="${param.user == 'admin'}">
        <c:out value="欢迎管理员"></c:out>
    </c:if>
    
    </body>
    </html>
    
  • 两者效果是一样的(自行区别好用之处)
    在这里插入图片描述

4、JSTL的核心标签库共13个:

在这里插入图片描述

其中<c:import>与三大指令中include指令作用基本相同,都是指定一个绝对或相对路径url的JSP页面,使其暴露在当前页面的指定位置。

4.1、核心标签从功能上可以分为四类:

在这里插入图片描述

4.2、out标签的用法

  • 输出常量。

    可以在value属性中直接赋值。

  • 输出变量

    变量不存在的时候可以配合default属性输出默认值,
    还可以通过escapeXml控制转义字符的输出格式;
    var设定存放值的变量。

    <%--输出常量(value直接赋值)--%>
    <c:out value="我是out输出标签"></c:out>
    
    <%--输出变量(value可从作用域中获取值)--%>
    <c:out value="${sessionScope.name}"></c:out>
    

4.3、set标签的用法

  • 存值到scope中。

    可以将值以变量的形式存放在指定的范围。
    scope设定存放值的范围;
    value指定存放值的内容;
    var设定存放的变量。

    <c:set scope="session" value="李四" var="name"></c:set>
    
  • 存值到JavaBean的属性中。

    target属性指定javabean的对象。
    property属性指定要赋值给javabean对象的哪个属性。
    value指定存放值的内容。

    <%--引入实体类实例化对象--%>
    <jsp:useBean id="user" class="com.ebuy.pojo.User"></jsp:useBean>
    <%--为实例化对象的name属性赋值--%>
    <c:set target="${user}" property="name" value="张三"></c:set>
    

4.4、remove标签的用法

  • 移除指定scope作用域内的变量

    var属性是必选
    scope属性是必选
    如果不同的scope中存在一样的变量可以通过scope属性指定删除哪个scope中的变量

    <c:remove scope="session" var="name"></c:remove>
    

4.5、catch标签的用法

  • catch标签

    catch标签可以包含容易出错的JSTL标签(逻辑)。
    var属性定义错误信息输出的变量名。

    <!--catch标签  -->
    <c:catch var="error">
        <c:set target="user" property="name" value="王五"></c:set>
    </c:catch>
    
    获取catch标签中的错误信息:<c:out value="${error}"></c:out><br>
    

4.6、if标签的用法

  • 用来实现分支条件的控制。

    test属性用来存放判断条件,一般使用EL表达式来编写。
    var属性指定名称用来存放判断结果类型为true还是false。
    scope属性用来存放var属性存放的范围。

    <c:if test="${param.score>=90}" var="boolean" scope="session"></c:if>
    

4.7、choose、when、otherwise标签的用法:

  • 通常这三个标签放在一起来使用。

    <c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为父标签来使用。
    <c:choose>标签和<c:when>标签也可以组合使用。

    <c:set var="score" value="99" scope="request"></c:set>
    <c:choose>
        <c:when test="${score>90 and score<=100}">
            优秀
        </c:when>
        <c:when test="${score>80 and score<=90}">
            良好
        </c:when>
        <c:when test="${score>70 and score<=80}">
            一般
        </c:when>
        <c:when test="${score>60 and score<=70}">
            及格
        </c:when>
        <c:otherwise>
            不及格
        </c:otherwise>
    </c:choose>
    

4.8、forEach标签的用法

  • 根据循环条件遍历集合中的元素。

    var设定变量名用于存储从集合中取出的元素(必须无默认值)。
    items制定要遍历的集合(必须无默认值)。
    begin、and用于制定遍历的起始位置和终止为止(有默认)。
    step制定循环的步长(有默认值)
    varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。

    <c:forEach var="存储当前遍历元素的变量"
               items="待遍历集合"
               begin="开始遍历元素的index值"
               end="结束遍历元素的index值"
               step="部分遍历中每次遍历的间隔元素个数"
               varStatus="指定一个变量用来存储当前元素的状态值">
        
        <%--操作var变量表示的元素<br>--%>
        
    </c:forEach>
    
  • 实例操作

    <table border="1">
        <c:forEach var="i" begin="1" end="10" step="1" varStatus="j">
            <tr>
                <td>${j}---${i}</td>
            </tr>
        </c:forEach>
    </table>
    

    在这里插入图片描述

  • 隔行换色

    <%--隔行变色--%>
    <table border="1">
        <c:forEach var="i" begin="1" end="10" step="1" varStatus="j">
            //在html的标签中可以嵌套使用jstl标签
            <tr <c:if test="${j.index%2==0}"> style="background-color: #3a52a8" </c:if></tr>
                <td>${j.index}---${i}</td>
            </tr>
        </c:forEach>
    </table>
    

    在html的标签中可以嵌套使用jstl标签

    在这里插入图片描述

  • forEach遍历list集合

    <%
        List list = new ArrayList();
    
        User user1 = new User();
        user1.setUserId("1001");
        user1.setUserName("张三");
        user1.setPassword("123456");
    
        User user2 = new User();
        user2.setUserId("1001");
        user2.setUserName("张三");
        user2.setPassword("123456");
    
        User user3 = new User();
        user3.setUserId("1001");
        user3.setUserName("张三");
        user3.setPassword("123456");
    
        list.add(user1);
        list.add(user2);
        list.add(user3);
    
    
        request.setAttribute("list",list);
    %>
    
    <table border="1">
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>密码</td>
        </tr>
    
        <C:forEach items="${requestScope.list}" var="u">
            <tr>
                <td>${u.userId}</td>
                <td>${u.userName}</td>
                <td>${u.password}</td>
            </tr>
        </C:forEach>
    </table>
    

    在这里插入图片描述

  • forEach遍历Map集合

    <%
        Map<String,String> map = new HashMap<>();
        map.put("1001","张三");
        map.put("1002","李四");
        map.put("1003","王五");
        request.setAttribute("map",map);
    %>
    
    <table border="1">
        <tr>
            <td>编号</td>
            <td>姓名</td>
        </tr>
    
        <c:forEach items="${requestScope.map}" var="m">
            <tr>
                <td>${m.key}</td>
                <td>${m.value}</td>
            </tr>
        </c:forEach>
    
    </table>
    
    

    在这里插入图片描述

4.9、forTokens标签

  • 用于浏览字符串,并根据指定的字符串将字符串截取。

    items指定被迭代的字符串
    delims指定使用的分隔符
    var指定用来存放遍历的元素

    <%
        request.setAttribute("zifu","中国,美国,英国,法国");
    %>
    
    <c:forTokens items="${requestScope.zifu}" delims="," var="z">
        ${z}<br>
    </c:forTokens>
    
    
    在这里插入图片描述

4.10、import标签的用法

  • 可以把其他静态或动态文件包含到本jsp页面。

    同<jsp:include>的区别为:
    <jsp:include>只能包含同一个web应用中的文件。
    而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
    url被导入资源的URL路径
    context相同服务器下其他的web工程,必粗以"/"开头
    var 以String类型存入被包含文件的内容
    Scope var变量的JSP范围
    charEncoding 被导入文件的编码格式
    varReader以Reader类型存储被包含的文件内容

    <%@ include file="footer.jsp"%>
    
    <c:import url="footer.jsp"></c:import>
    

4.11、redireck标签的用法

  • 该标签用来实现请求的重定向,同时可以在url中加入指定的参数。

    url指定重定向页面的地址,可以是一个string类型的绝对地址或者相对路径。
    context用于导入其他web应用中的页面。

    <c:redirect url="test.jsp"></c:redirect>
    

4.12、url标签的用法

  • 该标签用于动态生成一个String类型的url,可以同<c:param>标签共同使用,也可以使用html的标签实现超链接。

    value表示url路径值
    var将url的路径值存放在变量中
    scope表示var变量的范围

    <c:url value="http://www.baidu.com" var="baidu">
        <%--携带参数--%>
        <c:param name="name" value="zs"></c:param>
        <c:param name="sex" value="2"></c:param>
    </c:url>
    
    <a href="${baidu}">点击进入百度首页</a>
    
    在这里插入图片描述

4.13、fmt格式化标签(作为了解)

  • 此标签可以将日期格式化.

  • 属性介绍:

     value 用来格式化的时间或日期
     type 指定格式化的是日期还是时间,或者两者都是取值范围:date,time,both
     pattern 自定义格式化样式
     dateStyle 日期的格式化样式
     timeStyle 时间的格式化样式
     timeZone 指定使用的时区
     var 存储格式化后的结果
     scope 指定存储的范围
    

    导入fmt标签库
    <%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

    <%
        Date d = new Date();
        request.setAttribute("d",d);
    %>
    
    <fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
    

    在这里插入图片描述

以上是关于JSTL标签的主要内容,如果未能解决你的问题,请参考以下文章

JSP 标准标签库(JSTL)

JSTL核心标签详解

JSTL标签介绍

JSTL 标签大全详解

JSTL标签库

JSTL 标签大全详解