JSTL标签——核心标签库

JSP 标准标记库( Standard Tag Library , JSTL)是实现Web应用程序中常见的通用功能的定制标签库集,程序员通过JSTL标签避免在JSP页面中使用脚本。

JSTL是一个标准的已制定好的标签库,它可以应用到很多领域. 如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。

JSTL所提供的标签库主要分为五类:

JSTL 前置名称 URI 范例
核心标签库 c http://java.sun.com/jsp/jstl/core <c:out>
I18N格式标签库 fmt http://java.sun.com/jsp/jstl/fmt <fmt:formatDate>
SQL标签库 sql http://java.sun.com/jsp/jstl/sql <sql:query>
XML标签库 xml http://java.sun.com/jsp/jstl/xml <x:forEach>
函数标签库 fn http://java.sun.com/jsp/jstl/functions <fn:split>

配置 JSTL

包括两个 JAR 文件, jstl.jar 和 standard.jar 。

引入:

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

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

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

Core 标签库

Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。

1.<c:out>

用于结果输出。类似于 JSP 中 <% %> 表达式,或者是 EL 中 ${ } 。

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

注意:value属性为必填,escapeXml属性是true时,不解析特殊字符,false时,解析特殊字符。

 eg:

default的两种使用方式

<c:out value="${info}" default="hello!"/>

<c:out value="${info}">hello!</c:out>

 如果在uri中传递了参数info的值,那么显示value接收的值,否则显示default默认值。

2.<c:set>

用于将变量存储至JSP范围内或JavaBean的属性中或Map对象中。

<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>

属性列表:

名称

说明

必须

默认值

value

要被存储的值

var

欲存入的变量名称

scope

var变量的JSP范围

page

target

JavaBean或Map对象

property

指定target对象的属性

 eg:

将变量存储到Jsp范围内输出

<c:set var=”username” value=”iccccy” scope=”session”/>

<c:set var="password" scope="session">123</c:set>

对比:

若通过el表达式输出

${sessionScope.username}
${sessionScope.
password}
通过jstl中<c:out>标签输出
<c:out value="${sessionScope.username}"/>
<c:out value="${sessionScope.password}"/>

将变量存储到javaBean对象内输出

<jsp:useBean id="stu" class="school.student"/>

<c:set value="22" target="${stu}" property="age"/>

输出javaBean对象的属性值

年龄:<c:out value="${stu.age}"/>

3.<c:remove>

相对 <c:set> 来移除范围变量。

<c:remove var="varName" [scope="{ page|request|session|application }"] />

eg:

 <c:remove var=”username” scope=”session”/>

4.<c:catch>

 用于捕获抛出的异常对象,并将异常信息保存到变量中。

<c:catch [var="varName"] >nested actions</c:catch>

可以抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而 var 所标识的范围变量将被移除。

如果没有指定 var 属性,异常只是简单的被捕获,异常信息不会被保存。

eg:

<c:catch var=”exception”>

<%
 int i=5/0;
%>

</c:catch>
异常:<c:out value="${exception}"></c:out><br>

异常原因:<c:out value="${exception.cause}"></c:out><br> 

异常消息:<c:out value="${exception.message}"></c:out><br>

后一句相当于: exception.getMessage()

条件标签包括 <c:if><c:choose><c:when><c:otherwise>

1.<c:if>

用作条件判断,功能类似于JSP中的<%if(boolean){}%>

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>

eg:

<c:if test="${userName==null}" var="xx" scope="session">  该用户没有登录</c:if>
 ${xx}

2.<c:choose>

<c:choose> 和 <c:when> 、<c:otherwise> 一起实现条件执行,类似于 java 中的 if else。

<c:when>、<c:otherwise>无法单独使用,只能作为<c:choose>的子标签来使用。

<c:when>有一个test属性,该属性的值为布尔型,如果test的值为true,则执行<c:when>标签体的内容。<c:otherwise>标签没有属性,它必须作为<c:choose>标签的最后分支出现。

eg :

<% request.setAttribute("age",18);%>

   <c:choose>

        <c:when test="${age>70}">老年人</c:when>

        <c:when test="${age<=70&&age>35}">中年人</c:when>

        <c:when test="${age<=35&&age>18}">青年</c:when>

        <c:when test="${age<=18&&age>0}">少年或儿童</c:when>

        <c:otherwise>输入错误</c:otherwise>

   </c:choose>

 

迭代标签

迭代标签有 <c:forEach> <c:forTokens>.

1、<c:forEach>

用于遍历一个对象集合。

<c:forEach var="变量名" items="集合" varStatus="遍历状态名"  begin="begin" end="end" step="step" > 标签体 </c:forEach>

eg:

<c:forEach items="${mapInfos}" var="mapInfo">

<td>${mapInfo.key}</td>

   <td>${mapInfo.value.timestamp}</td>

   <td>${mapInfo.value.total}</td>

   <td>${mapInfo.value.used}</td>

   <td>${mapInfo.value.rate}</td>

   <td>${mapInfo.value.host}</td>    

</c:forEach>

也可以设定固定次数。

<c:forEach var =”i” begin=”100 “ end= “110”>

       ${i}

</c:forEach>

如果再加个 step= “ 2 ”那么每次增长为 2 。

2、<c:forTokens>

用于遍历字符串,而且每次遍历结果返回字符串中的一个单词。

<c:forTokens items="字符串" delims="分界符" var="变量名"  varStatus="遍历状态名" begin="begin" end="end" step="sep"> 标签体 </c:forTokens>

eg:

<c:forTokens items="zhangsan:lisi:wangwu" delims=":" var="name">

${name}

</c:forTokens>

URL相关的标签

1、<c:url>

 有标签体:用于对URL地址进行编码

<c:url value="URL" context="路径" var="变量名" scope="作用域">  标签体</c:url>

eg:

    <c:url value="/index.jsp" var="strUrl" scope="request">

      <c:param name="userName" value="张三"></c:param>

      <c:param name="age" value="22"/>

    </c:url>  

    ${strUrl}

运行结果:http://localhost:8080/index.jsp?userName=张三&age=22

无标签体:用于编辑上下文URL。

<c:url value="URL" context="路径" var="变量名" scope="作用域"/>

 <c:url value="/logon.jsp">登录</c:url> 

若当前路径为context=abc,则输出为:/abc/logon.jsp   

2、<c:import>:

用于向当前JSP页面中引入URL资源。

它和JSP 动作指令的<jsp:include>最大的差别在于,include指令和include动作不能向JSP页引入Web程序以外的资源,引入的资源必须位于当前Web程序中。

以String对象引入:

<c:import url="地址" context="上下文路径" var="变量名" scope="作用域" charEncoding="字符集">标签体使用</c:import>

eg:

<c:import url="http://www.baidu.com" var="myurl" charEncoding="gb2312">
</c:import>
<a href="${myurl }">地址</a>
以Reader对象导入:
<c:import url="地址" context="上下文路径" varReader="变量名" scope="作用域" charEncoding="字符集">标签体使用</c:import>

3、<c:redirect>

用于向用户的浏览器发送HTTP重定向响应,与javax.servlet.http.HttpServletResponse的sendRedirect()方法功能相当。

<c:redirect url="地址" context="上下文路径"/>

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

eg:

<c:redirect url="/login.jsp" context="/ch16">

<c:param name="name" value="张三"/>

<c:param name="age" value=" 22 "/>

</c:redirect>

4、<c:param>

用于为一个URL添加请求参数。

<c:param name="name" value="value">
只能在<c:url>、<c:import>、<c:redirect>标签中作为子元素来使用。

 

原文地址:https://www.cnblogs.com/iCcccy/p/4646339.html