介绍

  JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库。 Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。 JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:

      (1)核心标签库 (Core tag library)

      (2)I18N 格式标签库 (I18N-capable formatting tag library)

      (3)SQL 标签库 (SQL tag library)

      (4)XML 标签库 (XML tag library)

      (5)函数标签库 (Functions tag library)

JSTL

前缀

URI

核心标签库

c

http://java.sun.com/jsp/jstl/core

I18N格式标签库

fmt

http://java.sun.com/jsp/jstl/xml

SQL标签库

sql

http://java.sun.com/jsp/jstl/sql

XML标签库

xml

http://java.sun.com/jsp/jstl/fmt

函数标签库

fn

http://java.sun.com/jsp/jstl/functions

预备:

   若要在JSP 网页中使用JSTL ,一定要先做下面这行声明:

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

核心标签库 (Core tag library)

Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别是:

q         通用核心标签: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。

q         条件控制标签: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。

q         循环控制标签: <c:forEach> 、 <c:forTokens> 。

q         URL 相关标签: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。

<c:out>

<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样,例如:Hello ! <c:out value="${username}" />

语法

语法1:没有本体(body)内容

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

语法2:有本体内容

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

default value

</c:out>

属性名称

说明

EL

类型

必须

默认值

value

需要显示出来的值

Y

Object

default

如果value的值为null则显示default的值

Y

Object

escapeXml

是否转换特殊字符,如:<转换成&lt;

Y

boolean

true

 

注意

表格中的EL字段,表示此属性的值是否可以为EL 表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N 则反之。

Null 和错误处理

· 假若 value为null,会显示default 的值;假若没有设定default的值,则会显示一个空

的字符串。

说明

一般来说,<c:out>默认会将 <、>、’、” 和 & 转换为 &lt;、&gt;、'、" 和 &amp;。

假若不想转换时,只需要设定<c:out>的escapeXml 属性为fasle 就可以了。

范例

<c:out value="Hello JSP 2.0 !! " />

<c:out value="${ 3 + 5 }" />

<c:out value="${ param.data }" default="No Data" />

<c:out value="<p>有特殊字符</p>" />

<c:out value="<p>有特殊字符</p>" escapeXml="false" />

1.在网页上显示 Hello JSP 2.0 !! ;

2.在网页上显示 8;

3.在网页上显示由窗体传送过来的data 参数之值,假若没有data 参数,或data 参数的值为null 时,则网页上会显示No Data;

4.在网页上显示“<p>有特殊字符</p>”;

5.在网页上显示“有特殊字符”。

<c:set>

<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。

语法

语法1:将 value 的值储存至范围为scope 的 varName 变量之中

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

语法2:将本体内容的数据储存至范围为scope 的 varName 变量之中

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

… 本体内容

</c:set>

语法3:将 value 的值储存至 target 对象的属性中

< c:set value="value" target="target" property="propertyName" />

语法4:

将本体内容的数据储存至 target 对象的属性中

<c:set target="target" property="propertyName">

… 本体内容

</c:set>

属性

名称

说明

EL

类型

必须

默认值

value

要被储存的值

Y

Object

var

欲存入的变量名称

N

String

scopevar

变量的JSP范围

N

String

page

target

为一JavaBean或java.util.Map对象

Y

Object

property

指定target对象的属性

Y

String

范例

<c:set var="number" scope="request" value="${1 + 1}" />

<c:set var="number" scope="session" />

${3 + 5}

</c:set>

<c:set var="number" scope="request" value="${ param.number }" />

<c:set target="User" property="name" value="${ param.Username}" />

1.将2 存入Request 范围的number 变量中;

2.将8 存入Session 范围的number 变量中;<c:set>是把本体(body)运算后的结果来当做value的值。

3.假若 ${param.number}为null 时,则移除Request 范围的number 变量;若${param.number}不为null 时,则将 ${param.number}的值存入Request 范围的number 变量中;

4.假若 ${param.Username}为null 时,则设定User(JavaBean)的name 属性为null;若不为

null 时,则将 ${param.Username}的值存入User(JavaBean)的name 属性(setter 机制)。

注意

上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。

<c:remove>

<c:remove>主要用来移除变量。

语法

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

属性

名称

说明

EL

类型

必须

默认值

var

欲移除的变量名称

N

String

scope

var变量的JSP范围

N

String

page

说明

<c:remove>必须要有var 属性,即要被移除的属性名称,scope 则可有可无,例如:

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

将number 变量从Session 范围中移除。若我们不设定scope,则<c:remove>将会从Page、

Request、Session 及Application 中顺序寻找是否存在名称为number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。

注意:当不指定scope时,回remove掉从page到application的var指定的变量

<c:catch>

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

语法

<c:catch [var="varName"] >

… 欲抓取错误的部分

</c:catch>

属性

名称

说明

EL

类型

必须

默认值

var

用来储存错误信息的变量

N

String

说明

<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错

误,可以将错误信息储存至varName 变量中,例如:

<c:catch var="message">

: //可能发生错误的部分

</c:catch>

另外,当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序

会被中止忽略,但整个网页不会被中止。

<c:if>

<c:if>的用途就和我们一般在程序中用的if 一样。

语法

语法1:没有本体内容(body)

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

语法2:有本体内容

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

具体内容

</c:if>

属性

名称

说明

EL

类型

必须

默认值

Test

如果表达式的结果为true,则执行本体内容,false则相反

Y

boolean

var

用来储存test运算后的结果,即true或false

N

String

scope

var变量的JSP范围

N

String

page

<c:choose>

<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。

语法

<c:choose>

本体内容( <when> 和 <otherwise> )

</c:choose>

限制

<c:choose>的本体内容只能有:

·空白

·1 或多个 <c:when>

·0 或多个 <c:otherwise>

说明

若使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签.

<c:when>

<c:when>的用途就和我们一般在程序中用的when 一样。

语法

<c:when test="testCondition" >

本体内容

</c:when>

属性

名称

说明

EL

类型

必须

默认值

Test

如果表达式的结果为true,则执行本体内容,false则相反

Y

boolean

 

限制

☆ <c:when>必须在<c:choose>和</c:choose>之间

☆ 在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前

说明

<c:when>必须有test 属性,当test中的表达式结果为true时,则会执行本体内容;如果为

false时,则不会执行。

<c:otherwise>

在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行<c:otherwise> 的

本体内容。

语法

<c:otherwise>

本体内容

</c:otherwise>


<c:forEach>

<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当

条件符合时,就会持续重复执行<c:forEach>的本体内容。

语法1:迭代一集合对象之所有成员

<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>

本体内容

< /c:forEach>

语法2:迭代指定的次数

<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end"

[step="step"]>

本体内容

</c:forEach>

限制

·假若有begin 属性时,begin 必须大于等于 0

·假若有end 属性时,必须大于begin

·假若有step 属性时,step 必须大于等于0

Null 和错误处理

·假若items 为null 时,则表示为一空的集合对象

·假若begin 大于或等于items 时,则迭代不运算


<%@ page contentType="text/html;charset=GB2312 " %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach.jsp</title>
</head>
<body>
<h2><c:out value="<c:forEach> 的用法" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" >
${item}</br>
</c:forEach>
</body>
</html>

<c:forEach>除了支持数组之外,还有标准J2SE 的集合类型,例如:ArrayList、List、
LinkedList、Vector、Stack和Set 等等;另外还包括java.util.Map 类的对象.

<c:forEach>并不只是用来浏览集合对象而已,读者可以从语法2中发现,items并不存在

,但是当没有使用items 属性时,就一定要使用begin 和end 这两个属性。


<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach2.jsp</title>
</head>
<body>
<h2><c:out value="<c:forEach> 循环" /></h2>
<c:forEach begin="1" end="10" var="item" >
${item}</br>
</c:forEach>
</body>
</html>

上述范例中,我们并没有执行浏览集合对象,只是设定begin 和end 属性的值,这样它就
变成一个普通的循环。此范例是将循环设定为:从1 开始跑到10,总共会重复循环10 次,并
且将数字放到item 的属性当中.

begin主要用来设定在集合对象中开始的位置(注意:第一个位置为0);end 用来设定结束的位置;而step 则是用来设定现在指到的成员和下一个将被指到成员之间的间隔.

另外,<c:forEach>还提供varStatus 属性,主要用来存放现在指到之成员的相关信息。例如: varStatus="s",那么将会把信息存放在名称为s的属性当中。varStatus属性还有另外四个属性:index、count、first 和last,它们各自代表的意义如表:

属性

类型

意义

index

number

现在指到成员的索引

count

number

总共已经指到成员的总数

first

boolean

现在指到的成员是否为第一个成员

last

boolean

现在指到的成员是否为最后一个成员

我们可以使用varStatus 属性取得循环正在浏览之成员的信息,下面为一个简单的范例:


<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
</head>
<body>
<h2><c:out value="<c:forEach> varStatus 的四种属性" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item"varStatus="s">
<h2><c:out value="${item}"/>的四种属性:</h2>
index:${s.index}</br>
count:${s.count}</br>
first:${s.first}</br>
last:${s.last}</br>
</c:forEach>
</body>
</html>

还有一个例子:

我要获取:http://localhost:8080/t/index.jsp?a=123&b=256&com=297中的参数列表按如下:

键com:297
键b:256
键a:123

可以结合EL表单式实现:

< c:forEach items = " ${param} "  var = " b " >
        键 b.key: {b.value } < br />
</ c:forEach >

<c:forTokens>

<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens   items="stringOfTokens"

        delims="delimiters"

        [var="varName"]

        [varStatus="varStatusName"]

        [begin="begin"]

        [end="end"]

        [step="step"]>
本体内容
</c:forTokens>

var       用来存放现在指到的成员N String 否无
items   被迭代的字符串Y String 是无
delims     定义用来分割字符串的字符N String 是无
varStatus 用来存放现在指到的相关成员信息N String 否无
begin       开始的位置Y int 否0
end         结束的位置Y int 否最后一个成员
step    每次迭代的间隔数Y int 否1

说明
<c:forTokens>的begin、end、step、var 和varStatus 用法都和<c:forEach>一样,因此,笔者在这里就只介绍items 和delims 两个属性:items 的内容必须为字符串;而delims 是用来分割items 中定义的字符串之字符。
范例
下面为一个典型的<c:forTokens>的范例:

< c:forTokens  items ="A,B,C,D,E"  delims =","  var ="item"   >
${item}
</ c:forTokens >

上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5 个部分,也就是执行循环5 次,但是并没有将A,B,C,D,E 中的“,”显示出来。items 也可以放入EL 的表达式,如下:

<%
String  phoneNumber  =   " 123-456-7899 " ;
request.setAttribute( " userPhone " , phoneNumber);
%>
< c:forTokens  items ="${userPhone}"  delims ="-"  var ="item"   >
${item}
</ c:forTokens >

这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为3 份,每执行一次循环就将浏览的部分放到名称为item 的属性当中。delims 不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:

< c:forTokens  items ="A,B;C-D,E"  delims =",;-"  var ="item"   >
${item}
</ c:forTokens >

此范例会在网页输出ABCDE,也就是说,delims 可以一次设定所有想当做分割字符串用的字符。其实用<c:forEach>也能做到分割字符串,写法如下:

< c:forEach  items ="A,B,C,D,E"  var ="item"   >
${item}
</ c:forEach >

上述范例同样也会在网页输出ABCDE。<c:forEach>并没有delims这个属性,因此<c:forEach>无法设定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,这和使用<c:forTokens>,delims 属性设为“,”的结果相同。所以如果使用<c:forTokens>来分割字符串,功能和弹性上会比使用<c:forEach>来得较大。

早起的鸟儿有虫吃-JSTL核心标签库[收藏]相关推荐

  1. ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]

    介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web  ...

  2. JSTL 核心标签库标签共有13个

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  3. 深入分析JavaWeb Item21 -- JSTL核心标签库

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码. 1.1 使用方法 外包项目, ...

  4. java中jstl核心包丢失,小博老师解析Java核心技术 ——JSTL核心标签库

    [引言] JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core.format.xml 和 sql)和一对通 ...

  5. JavaWeb学习笔记——JSTL核心标签库

    转载于:https://www.cnblogs.com/tonglin0325/p/5492805.html

  6. jstl核心标签使用

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  7. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...

  8. 9. JSP - 核心标签库

    JSTL核心标签库简介 JSTL中的核心标签库主要用于完成基本的逻辑运算,在开发中使用较多. 在开发前导入相关jar包之后,还需要在页面中通过 taglib 指令将标签库导入: <%@tagli ...

  9. java核心标签库,16.JSTL标签库(我的JavaEE笔记)

    主要内容:(工程el_example中6.jsp) 标签 标签 标签 标签 标签 标签 标签 标签 标签 JSTL标签库中包含核心标签库.国际化标签库.数据库标签.XML标签和JSTL函数(EL函数) ...

最新文章

  1. 2.2 vivi虚拟视频驱动测试
  2. 关于SQLServer2000中触发器的使用——多行数据提交
  3. (0032) iOS 开发之Block 的基础用法及注意事项1
  4. 十进制度转换为度分秒
  5. “红色军团”崛起Gartner x86服务器虚拟化魔力象限
  6. win8.1自带metro应用不工作解决办法
  7. 为什么需要超过48k的采样音频?
  8. 选择一本适合自己的Linux系统书籍
  9. 重新leetcode第2天——递归讲解合集
  10. logging日志输出模块
  11. 2018全国计算机二级c语言题库,全国计算机二级c语言题库试题及答案
  12. 转载 cisco 路由器 ADSL拨号上网配置
  13. 小米root以及面具的使用
  14. NXP MIMXRT1052CVL5B + 正点原子 + MCUXpresso IDE 开发环境搭建
  15. 164work 综合练习1
  16. 我所理解的JS ~~运算符
  17. 1、孟子·梁惠王上 孟子·梁惠王下
  18. 微信小程序邀请判断登陆信息(邀请前做其他操作)
  19. 华盛顿大学西雅图分校计算机专业排名,2020年华盛顿大学西雅图分校世界排名...
  20. LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(五)之使用RabbitMQ缓存消息

热门文章

  1. Bada学习-(七)应用状态转换
  2. 《C Primer Plus》6.15 复习题
  3. 一文读懂5G基站节能技术
  4. HYSBZ - 1502 月下柠檬树【辛普森积分】
  5. 5G无线技术基础自学系列 | 频谱划分
  6. 激活facetime和imessage国际短信00447537410217不扣费?
  7. 一步一步搭建11gR2 rac+dg之DG 机器配置(七)【转】
  8. PHP验证身份证、获取身份证信息
  9. WPF TextBox 允许输入数字及字母的工具类
  10. Android Bitmap 初探