JSTL标签——核心标签库

mac2022-06-30  83

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

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

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

JSTL前置名称URI范例核心标签库chttp://java.sun.com/jsp/jstl/core<c:out>I18N格式标签库fmthttp://java.sun.com/jsp/jstl/fmt<fmt:formatDate>SQL标签库sqlhttp://java.sun.com/jsp/jstl/sql<sql:query>XML标签库xmlhttp://java.sun.com/jsp/jstl/xml<x:forEach>函数标签库fnhttp://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

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)