Jstl之核心标签库与格式标签库使用.docx

上传人:b****9 文档编号:23345629 上传时间:2023-05-16 格式:DOCX 页数:27 大小:25.75KB
下载 相关 举报
Jstl之核心标签库与格式标签库使用.docx_第1页
第1页 / 共27页
Jstl之核心标签库与格式标签库使用.docx_第2页
第2页 / 共27页
Jstl之核心标签库与格式标签库使用.docx_第3页
第3页 / 共27页
Jstl之核心标签库与格式标签库使用.docx_第4页
第4页 / 共27页
Jstl之核心标签库与格式标签库使用.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Jstl之核心标签库与格式标签库使用.docx

《Jstl之核心标签库与格式标签库使用.docx》由会员分享,可在线阅读,更多相关《Jstl之核心标签库与格式标签库使用.docx(27页珍藏版)》请在冰豆网上搜索。

Jstl之核心标签库与格式标签库使用.docx

Jstl之核心标签库与格式标签库使用

Jstl之核心标签库与格式标签库使用

JSTL(JSPStandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。

JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat4.x。

在JSP2.0中也是作为标准支持的。

JSTL1.0发布于2002年6月,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。

core标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。

它还提供了用来生成和操作URL的标记。

顾名思义,format标记库定义了用来格式化数据(尤其是数字和日期)的操作。

它还支持使用本地化资源束进行JSP页面的国际化。

xml库包含一些标记,这些标记用来操作通过XML表示的数据,而sql库定义了用来查询关系数据库的操作。

一、JSTL库安装

如果要使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用XMLprocessing及Databaseaccess(SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。

ApacheTomcat安装JSTL库步骤如下:

下载standard.jar和jstl.jar,这里可以下

standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。

使用任何库,你必须在每个JSP文件中的头部包含标签。

standard.jar的作用

JSP标准标签库,和jstl.jar一起使用,在1.0的版本中,但在jstl-1.2.jar就不在需要了。

如果你想在项目中使用JSTL和EL表达式,那么你必须要引入这个standard.jar文件。

即使你没有引入,那MyEclipse工具自带的类库也会帮你倒入。

其他工具不会。

jstl.jar下载地址:

http:

//repo2.maven.org/maven2/javax/servlet/jstl/

standard.jar下载地址:

http:

//repo2.maven.org/maven2/taglibs/standard/

如果是在Maven中可以这么写:

[html]viewplaincopy

--standard.jar-->

taglibs

standard

1.1.2

--JSTL-->

javax.servlet

jstl

1.1.2

二、核心标签

核心标签是最常用的JSTL标签。

引用核心标签库的语法如下:

[html]viewplaincopy

<%@taglibprefix="c"uri="%>

标签描述

out>用于在JSP中显示数据,就像<%=...>

set>用于保存数据

remove>用于删除数据

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

if>与我们在一般程序中用的if一样

choose>本身只当做

when>和

otherwise>的父标签

when>

choose>的子标签,用来判断条件是否成立

otherwise>

choose>的子标签,接在

when>标签后,当

when>标签判断为false时被执行

import>检索一个绝对或相对URL,然后将其内容暴露给页面

forEach>基础迭代标签,接受多种集合类型

forTokens>根据指定的分隔符来分隔内容并迭代输出

param>用来给包含或重定向的页面传递参数

redirect>重定向至一个新的URL.

url>使用可选的查询参数来创造一个URL

if>使用

  

if>标签必须要有test属性,当test中的表达式结果为true时,则会执行本体内容;如果为false,则不会执行。

例如:

${requestScope.username=='admin'},如果requestScope.username等admin时,结果为true;若它的内容不等于admin时,则为false。

  接下来看下列的范例:

  

iftest="${requestScope.username=='admin'}">

  ADMIN您好!

!

//body部分

  

if> 如果名称等于admin,则会显示"ADMIN您好!

!

"的动作,如果相反,则不会执行

if>的body部分,所以不会显示"ADMIN您好!

!

//body部分"。

另外

if>的本体内容除了能放纯文字,还可以放任何JSP程序代码(Scriptlet)、JSP标签或者HTML码。

  除了test属性之外,

if>还有另外两个属性var和scope。

当我们执行

if>的时候,可以将这次判断后的结果存放到属性var里;scope则是设定var的属性范围。

哪些情况才会用到var和scope这两个属性呢?

例如:

当表达式过长时,我们会希望拆开处理,或是之后还须使用此结果时,也可以用它先将结果暂时保留,以便日后使用。

例子:

[html]viewplaincopy

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@taglibprefix="c"uri="

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<%

Stringamind="Admin";

request.setAttribute("amind",amind);

%>

iftest="${requestScope.amind=='Admin'}"var="condition"

scope="request">

  您好Admin先生

if>

运行结果:

choose>使用

choose>用于条件选择,他和

when>

otherwise>一起使用,他们只能组合在一起使用

when>代表了

choose>的一个条件分支,他必须以

choose>作为他的父标签

他必须在

otherwise>之前出现,只要遵寻这两个规则,使用起来很简单,下面给出代码:

[html]viewplaincopy

choose>

whentest="expression">

bodycontent

when>

whentest="expression">

bodycontent

when>

...

otherwise>

bodycontent

otherwise>

choose>

如:

[html]viewplaincopy

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@taglibprefix="c"uri="

useBeanid="user"class="com.mucfc.User"/>

setPropertyproperty="name"name="user"value="arthur"/>

setPropertyproperty="age"name="user"value="12"/>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

choose>

whentest="${user.name=='arthur'}">

欢迎朋友:

${user.name}

when>

otherwise>

登录失败

otherwise>

choose>

运行结果:

forEach>

foreach>类似于for和foreach循环

forEach>标签用于通用数据循环,它有以下属性

属性描述是否必须缺省值

items进行循环的项目否无

begin开始条件否0

end结束条件否集合中的最后一个项目

step步长否1

var代表当前项目的变量名否无

varStatus显示循环状态的变量否无

forEach>标签的语法定义如下所示。

[html]viewplaincopy

forEachvar="name"items="expression"varStatus="name"begin="expression"end="expression"step="expression">

bodycontent

forEach>

forEach>标签的items属性支持Java平台所提供的所有标准集合类型。

此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。

它所支持的集合类型以及迭代的元素如下所示:

Java.util.Collection:

调用iterator()来获得的元素。

ava.util.Map:

通过java.util.Map.Entry所获得的实例。

java.util.Iterator:

迭代器元素。

java.util.Enumeration:

枚举元素。

Object实例数组:

数组元素。

基本类型值数组:

经过包装的数组元素。

用逗号定界的String:

分割后的子字符串。

javax.servlet.jsp.jstl.sql.Result:

SQL查询所获得的行。

如可以写:

[html]viewplaincopy

<%Listlist=newArrayList();

list.add("nqwe");

list.add("ftyu");

list.add("vfg");

request.setAttribute("list",list);

%>

forEachvar="str"items="${list}"varStatus="status">

${status.count}:

outvalue="${str}"/>

forEach>

整数

[html]viewplaincopy

forEachvar="i"begin="1"end="10"step="1">

outvalue="${i}"/>,

forEach>

计算x的平方

[html]viewplaincopy

forEachvar="x"begin="0"end="10"step="2">

forEach>

ValueSquare

outvalue="${x}"/>

outvalue="${x*x}"/>

字符串"47,52,53,55,46,22,16,2"分隔.

[html]viewplaincopy

forTokensitems="47,52,53,55,46,22,16,2"delims=","var="dailyPrice">

outvalue="${dailyPrice}"/>

forTokens>

使用步长

[html]viewplaincopy

forEachvar="seconds"begin="0"end="${pageContext.session.maxInactiveInterval}"step="60">

forEach>

secondsecond

outvalue="${seconds}"/>

outvalue="${seconds}"/>

对数组进行循环

[html]viewplaincopy

<%intai[]={10,20,30,40,50};

pageContext.setAttribute("ary",ai);

%>

forEachvar="i"items="${ary}">

outvalue="${i}"/>*

forEach>

<%

Cookiec=newCookie("cookie1","one");

response.addCookie(c);

%>

<%

Cookiecookies[]=request.getCookies();

CookiesCookie=null;

Stringsname=null;

Stringname=null;

if(cookies==null)//如果没有任何cookie

out.print("noneanycookie");

else

{

//out.print(cookies.length+"
");

for(inti=0;i

{

sCookie=cookies[i];

sname=sCookie.getName();

name=sCookie.getValue();

out.println(sname+"->"+name+"
");

}

}

%>

CookieName

CookieValue

forEachvar="cook"items="${pageContext.request.cookies}">

outvalue="${cook.name}"/>

outvalue="${cook.value}"/>

forEach>

字符串数组循环

[html]viewplaincopy

<%Stringas[]={

"Afirststring","Ladeuxiemestring","Ellatroisiemostringo"

};

request.setAttribute("stringArray",as);

%>

forEachvar="string"items="${stringArray}">

outvalue="${string}"/>

forEach>

枚举

[html]viewplaincopy

<%

Hashtablehashtable1=newHashtable();

pageContext.setAttribute("numberMap",hashtable1);

hashtable1.put(newInteger

(1),"uno");

hashtable1.put(newInteger

(2),"dos");

hashtable1.put(newInteger(3),"tres");

hashtable1.put(newInteger(4),"cuatro");

hashtable1.put(newInteger(5),"cinco");

hashtable1.put(newInteger(6),"seis");

hashtable1.put(newInteger(7),"siete");

hashtable1.put(newInteger(8),"ocho");

hashtable1.put(newInteger(9),"nueve");

hashtable1.put(newInteger(10),"diez");

java.util.Enumerationenumeration=hashtable1.keys();

pageContext.setAttribute("enumeration",enumeration);

%>

forEachvar="item"items="${enumeration}"begin="2"end="10"step="2">

outvalue="${item}"/>

forEach>

map

[html]viewplaincopy

forEachvar="prop"items="${numberMap}"begin="1"end="5">

outvalue="${prop.key}"/>=

outvalue="${prop.value}"/>

outvalue="${prop[key]}"/>

forEach>

set>使用

set>标记是JSTL的setProperty动作的友好版本。

标签是有用的,因为它的表达式求值,并使用结果的JavaBean或java.util.Map对象设置一个值。

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

[html]viewplaincopy

setvalue="value"var="varName"[scope="{page|request|session|application}"]/>

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

[html]viewplaincopy

setvar="varName"[scope="{page|request|session|application}"]>

…本体内容

set>

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

[html]viewplaincopy

setvalue="value"target="target"property="propertyName"/>

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

[html]viewplaincopy

settarget="target"property="propertyName">

…本体内容

set>

它有如下属性属性描述是否必须缺省值:

名称

说明

EL

类型

必须

默认值

value

要被储存的值

Y

Object

var

欲存入的变量名称

N

String

scope

var变量的JSP范围

N

String

pagescope

target

为一JavaBean或java.util.Map对象

Y

Object

property

指定target对象的属性

Y

String

如果指定了target属性,那么property属性也必须指定。

可以看个例子:

[html]viewplaincopy

setvar="num"scope="session"value="${4000*2}"/>

outvalue="${num}"/>

settarget="${user}"property="name"value="linbingwen"/>

outvalue="${user.name}"/>

结果:

remove>使用

remove标签一般和set标签配套使用,两者是相对应的,remove标签用于删除某个变量或者属性,使用格式如下:

[html]viewplaincopy

removevar=”varName”[scope=”page|request|session|application”]/>

Remove标签中使用的各属性说明如下:

1.scope:

设定这个需要删除的变量的所在范围.

2.var:

需要删除的变量或者对象属性的名称.

如果没有scope属性,即采用默认值,就相当于调用PageContext.remove

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1