zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

收藏 标签 核心 JSTL
2023-09-14 08:57:54 时间

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)

 


若要在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字段,表示此属性的值是否可以为EL 表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N 则反之。

 

Null 和错误处理

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

的字符串。

说明

一般来说, c:out 默认会将  、 、’、” 和   转换为  、 、 #039;、 #034; 和  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

属性


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 }"] /

属性


说明

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

属性


说明

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

属性


说明

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

 

c:when

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

语法

c:when test="testCondition"

本体内容

/c:when

属性


  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,它们各自代表的意义如表:

 


 我们可以使用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


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 来得较大。

看了我的mybatis-plus用法,同事也开始悄悄模仿了 本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入,配置,使用,以及扩展等常用的方面做一个汇总整理,尽量包含大家常用的场景内容。
一文把Servlet整的明明白白 ​ Cookie(饼干) 是服务器通知客户端保存键值对的一种技术。客户端有了 Cookie 后,每次请求都发送给服务器。每个 Cookie 的大小不能超过 4kb。
二哥聊RPA 公号「二哥聊RPA」。关注我,一起洞察 RPA ◎ RPA创业者 ◎ 现明堂红木商业顾问,为十月结晶、可啦啦、鑫蜂维等多家企业提供 RPA 咨询服务 ◎ 希望帮助大家在 RPA 上做一些力所能及的事情