JSTL标签库

Posted gdwkong

tags:

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

  • 一、JSTL的概述

    1、Apache开发与维护,依赖EL表达式

    2、Apache Tomcat安装JSTL 库步骤如下:

      从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。

      下载jakarta-taglibs-standard-1.1.2.zip 包并解压,将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。

    3、四大库

    • core:核心库
    • fmt:格式化,日期和数字
    • sql:过时
    • xml:过时

    4、使用taglib指令导入标签库

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

    5、core标签库常用标签

    ①out和set

    • <c:out>:输出
      • value:可以是字符串常量,也可以是EL表达式
      • default:当要输出的内容为null时,会输出default指定的值
      • escapeXml:默认值为true,表示转义。
    示例 说明
    <c:out value="aaa"/> 输出aaa字符常量
    <c:out value="${aaa}"/> 与${aaa}相同,全域查找
    <c:out value="${aaa}" default="xxx"/> 当${aaa}不存在时,输出xxx字符

    <%

    request.setAttribute("a","<script>alert(‘hello‘);</script>");

    %>

    <c:out value="${a}" default="xxx" escapeXml="false"/>

    当escapeXml为false,不会转换“<”、">"。

    这可能会收到javascript攻击。

    • <c:set>:设置(创建域的属性)
    • var:变量名
    • value:变量值,可以是EL表达式
    • scope:域,默认为page,可选值,page、request、session、application。
    示例 说明
    <c:set var="a" value="hello"/> 在pageContext中添加name为a,value为hello的数据
    <c:set var="a" value="hello" scope="sesssion"/> 在session中添加name为a,value为hello的数据

    ②remove

    • <c:remove>:删除域变量
      • var:变量名
      • scope:如果不给出scope,表示删除所有域中该名称的变量;如果指定了域,那么只删除该域的变量。
    示例 说明
    <%
    pageContext.setAttribute("a","pageContext");
    request.setAttribute("a","request");
    session.setAttribute("a","session");
    application.setAttribute("a","application");
    %>
    <c:remove var="a"/>
    <c:out value="${a}" default="none"/>
    删除所有域中name为a的数据。
    <c:out value="${a}" scope="page"/>
    删除pageContext中name为a的数据

    ③url:url标签会在需要URL重写时添加sessionId 。

    • value:指定一个路径,它会在路径前面自动添加项目名。
      • <c:url value="/index.jsp/">,它会输出/day13_1/index.jsp
    • 子标签:<c:param>,用来给url后面添加参数。
    • var:指定变量名,一旦添加了这个属性,那么url标签就不会再输出到页面,而是把生成url保存到域中。 
    示例 说明
    <c:url value="/"/>
    输出上下文路径:/day08_1/
    <c:url value="/" var="a" scope="request"/>
    把本该输出的结果赋给变量a,范围为request
    <c:url value="/AServlet"/>
    输出上下文路径:/day08_1/AServlet

    <c:url value="/AServlet">

    <c:param name="username" value="abc"/>

    <c:param name="password" value="123"/>

    </c:url>

    输出:/day08_1/AServlet?username=abc&password=123

    如果参数中包含中文,那么会自动使用URL编码。

    ④if:if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

    <c:set var="a" value="hello"/>
    <c:if test="${not empty a}">
         <c:out value="${a}"/>
    </c:if>

    ⑤choose:choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。

    <c:set var="score" value="${param.score}"/>
    <c:choose>
        <c:when test="${score >100 || score <0 }错误的分数:${score}</c:when>
        <c:when test="${score >=90 }A级</c:when>
        <c:when test="${score >=80 }B级</c:when>
        <c:when test="${score >=70 }C级</c:when>
        <c:when test="${score >=60 }D级</c:when>
        <c:otherwise>E级</c:otherwise>
    </c:choose>

    ⑥forEach:它用来循序遍历数组、集合,还可以用来计算方式来循环。

    <%--计数方式,1<=i<=10 --%>
    <c:forEach var="i" begin="1" end="10" step="2">
         ${i}
    </c:forEach>
    //等同于下式
    for(int i = 1; i <= 10; i++){}

    属性:

    • var:循环变量
    • begin:设置循环变量从几开始
    • end:设置循环变量到几结束。
    • step:设置步长,等同于i++,或i+=2,step默认为1.
    <!-- 输出数组、集合 -->
    <c:forEach items="${strs}" var="str">
           ${str }<br/>
    </c:forEach>
    //等同于
    for(String str: strs ){...}

    属性:

    • items:指定要循环谁,它可以是一个数组或一个集合
    • var :把数组或集合中的每个元素赋值给var指定的变量。
    • 注意:在 items="${strs }"中,“ }" ”大括号与双引号之间不能有空格。

    循环状态:可以使用varStaturs来创建循环状态变量。

      <%
        ArrayList<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
    
        request.setAttribute("list",list);
      %>
      <c:forEach items="${list}" var="ele" varStatus="vs">
        ${vs.count} ${vs.index} ${vs.first} ${vs.last}
      </c:forEach>

    循环状态变量有如下属性:

    • count:循环元素的个数。
    • index:循环元素的下标。
    • first:是否为第一个元素
    • last:是否为最后一个元素
    • current:当前元素

    6、fmt库:格式化库

    ①格式化日期

    <fmt:formatDate value="" pattern=""/>

    <%
       Date date = new Date();
       request.setAttribute("d",date);
    %>
     <fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"/>
    • value:指定一个Date类型的变量
    • pattern:用来指定输出的模板。

    <fmt:formatNumber value="${num1}" pattern="0.00">

    保留小数点后2位,它会四舍五入,如果不足两位,以0补位。

    <fmt:formatNumber value="${num1}" pattern="#.##">

    保留小数点后2位,它会四舍五入,如果不足两位,不补位。








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

JSTL标签库

复习整理1:jsp标准标签库jstl

jsp之jstl核心标签库

JSP标准标签库:JSTL

JSP标准标签库:JSTL

JSTL标签库