第三章-第三讲-JSTL标准标签库_第1页
第三章-第三讲-JSTL标准标签库_第2页
第三章-第三讲-JSTL标准标签库_第3页
第三章-第三讲-JSTL标准标签库_第4页
第三章-第三讲-JSTL标准标签库_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JSP标准标签库(JSTL)2纲要JSTL简介

JSTL的下载与安装

Core标签库的使用31.JSTL简介(1)什么是JSTL?JSTL(JSPStandardTagLibrary,JSP标准标签库)是一个开源项目,是一个标准的已定制好的JSP标签库。它可以替代Java代码实现各种功能,如:输入输出、流程控制、迭代、数据库查询及国际化的应用等。(2)使用JSTL的好处:简化JSP和WEB程序的开发,可以大大减少JSP中脚本代码的数量;提供一组标准标签,可用于编写各种动态JSP页面4(3)JSTL提供的标签库主要分为五大类:核心标签库

(Coretaglibrary)表达式操作、流程控制、迭代、URL操作I18N格式标签库

(I18N-capableformattingtaglibrary)国际化、文字格式标准化SQL标签库

(SQLtaglibrary)数据库查询XML标签库

(XMLtaglibrary)XML文件的剖析函数标签库

(Functionstaglibrary)5JSTL前置名称URI范例核心标签库c/jsp/jstl/core<c:out>I18N格式标签库fmt/jsp/jstl/xml<fmt:formatDate>SQL标签库sql/jsp/jstl/sql<sql:query>XML标签库xml/jsp/jstl/fmt<x:forBach>函数标签库fn/jsp/jstl/functions<fn:split>对五大类的描述:EL专题1.EL简介EL

全名为ExpressionLanguage,它原本是JSTL1.0为方便存取数据所自定义的语言。当时EL只能在JSTL标签中使用,如下:<c:outvalue="${3+7}">JSP2.0之后,EL已经正式纳入成为标准规范之一,因此,只要是支持Servlet2.4/JSP2.0

的Container,就都可以在JSP网页中直接使用EL了2.EL语法所有EL都是${}

例:${sessionScope.user.sex}从Session的范围中,取得用户的性别。依照之前JSP的写法如下:Useruser=(User)session.getAttribute("user");Stringsex=user.getSex();2.EL语法.

|

[]

两种运算符两种运算符来存取数据。下列两者所代表的意思是一样的${sessionScope.user.sex}等于${sessionScope.user["sex"]}区别:当要存取的属性名称中包含一些特殊字符,如.或

–非字母或数字的符号,使用[],例如:${user.My-Name}

改为${user["My-Name"]}2.EL语法EL变量例如:${username}含义:是取出某一范围中名称为username的变量,因为没有指定哪一个范围的username,所以它的默认值会先从Page

范围找,假如找不到,再依序到Request、Session、Application范围。2.EL语法EL变量EL属性范围属性范围(jstl名称)EL中的名称PagePageScopeRequestRequestScopeSessionSessionScopeApplicationApplicationScope范例说明${pageScope.username}取出Page范围的username变量${requestScope.username}取出Request范围的username变量${sessionScope.username}取出Session范围的username变量${applicationScope.username}取出Application范围的username变量Stringusername=(String)session.getAttribute("username")2.EL语法自动转变类型EL除了提供方便存取变量的语法之外,另外一个方便的功能就是:自动转变类型${param.count+20}如果用JSP脚本语法:Stringstr_count=request.getParameter("count");intcount=Integer.parseInt(str_count);count=count+20;2.EL语法EL保留字所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误3.EL作用EL主要作用:获取数据:EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。获取web开发常用对象EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。调用Java方法EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。使用EL表达式获取数据语法:“${标识符}”EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串)。示例:${user}执行运算语法:${运算表达式},EL表达式支持如下运算符:获取Web开发常用对象隐含对象名称描述pageContext对应于JSP页面中的pageContext对象pageScope代表page域requestScope代表request域sessionScope代表session域applicationScopeparamparamValues代表application域ServletRequest.getParameter(Stringname)。回传String类型的值ServletRequest.getParameterValues(Stringname)。回传String[]类型的值EL隐含对象1.与范围有关的隐含对象applicationScopesessionScoperequestScopepageScopeEL隐含对象2.与输入有关的隐含对象paramparamValues以前在JSP中获得用户的请求参数:request.getParameter(Stringname)request.getParameterValues(Stringname)在EL中则可以使用param和paramValues${}${paramV}EL调用Java方法EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。2.JSTL的下载与安装(1)下载jstl.jar和standard.jar(2)安装将上述两个文件直接复制到应用程序的WEB-INF\lib目录下即可223、JSTL核心标签库格式:<%@taglibprefix="c"uri="/jsp/jstl/core"%><c:xxx属性1=“值1”…属性k=“值k”…>

核心标签库(Core)主要有:基本输入输出/表达式操作流程控制、迭代操作和URL操作。分类功能分类标签名称Core表达式操作outsetremovecatch流程控制Ifchoosewhenotherwise迭代操作forEachforTokensURL操作importurlredirectparam23表达式操作:包括4个标签<c:out>、<c:set>、<c:remove>、<c:catch>1)<c:out>

功能:主要用来显示数据的内容,如同<%=表达式%>

例:<c:outvalue="${username}"/>

格式:格式1:没有标签体

<c:outvalue=“value”[escapeXml=“true|false”]

[default=“默认值”]/>格式2:有标签体内容

<c:outvalue="value"[escapeXml="true|false"]>

默认值

</c:out>24说明:只有当value的值为null时,才会输出缺省值;default属性不能与标签体同时出现;escapeXml属性用来控制一些特殊字符(如:<、>、’、”、&等)是否进行转换,默认值为true,即<c:out>默认会将<、>、’、”和&转换为<、>、'、"和&

若不想转换时,只需设为false即可。25<%@pagecontentType="text/html;charset=gb2312"%><%@taglibprefix="c"uri="/jsp/jstl/core"%><html><body><c:outvalue="HelloJSP2.0!!"/><p><c:outvalue="${3+5}"/><p><c:outvalue="${param.data}"default="NoData"/><p><c:outvalue="<h2>有特殊字符:<>'&</h2>"/><c:outvalue="<h2>有特殊字符:<>'&</h2>"escapeXml="false"/></body></html>26272)<c:set>

功能:用来将变量存储在JSP范围中或JavaBean的属性中。

格式:格式1:将

value的值储存在scope的范围内的varName

变量中 <c:setvalue="value"var="varName"[scope=" page|request|session|application"]/>格式2:将标签体的内容储存在scope范围内的

varName变量中

<c:setvar=“varName”[scope=“page|…”]>

标签体内容

</c:set>28格式3:将value的值保存至target对象的属性中<c:setvalue=“value”target=“对象名”property="propertyName"/>格式4:将标签体的内容保存至target对象的属性中

<c:settarget=“对象名”property=“propertyName”>

标签体内容

</c:set>29<%@pagecontentType="text/html;charset=ISO-8859-1"%><%@taglibprefix="c"uri="/jsp/jstl/core"%><html><body><c:setvar="userName"scope="session">zxx</c:set><c:outvalue="${userName}"/><br/><hr/><c:setvar="bookname"scope="session"/><c:outvalue="${bookname}"/></body></html>304)<c:catch>功能:主要用来捕获异常,并将异常信息储存起来格式:

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

欲捕获异常的部分

</c:catch>3)<c:remove>功能:用移除某个变量格式:

<c:removevar="varName"[scope=" page|request|session|application"]/>储存错误信息的变量31<%@taglibprefix="c"uri="/jsp/jstl/core"%><%@pagecontentType="text/html;charset=gb2312"%><%@pagepageEncoding="UTF-8"%><html><body><c:setvalue="org.it315"var="company"scope="request"/><c:setvar="passWord"scope="session">a123456a</c:set>在没有使用<c:remove>标签之前,变量的值为:<br/>company:<c:outvalue="${company}"/><br/>passWord:<c:outvalue="${passWord}"/><br/>32<c:removevar="company"scope="request"/><c:removevar="passWord"scope="session"/><hr/>在使用<c:remove>标签之后,变量的值为:<br/>company:<c:outvalue="${company}"/><br/>passWord:<c:outvalue="${passWord}"/></body></html>331)<c:if>

条件判断

格式:格式1:没有标签体,如果条件为true,就给变量赋值 <c:iftest=“测试条件" var="varName“[scope="page|request|session|application"]/>格式2:有标签体内容,若条件为true,则输出具体内容

<c:iftest=“测试条件"[var="varName"]

[scope="page|request|session|application"]>

具体内容

</c:if>注意:无else部分(2)流程控制:包括4个标签<c:if>

<c:choose>

<c:when>

<c:otherwise><%@tagliburi="/jsp/jstl/core"prefix="c"%>

<html>

<body>

<c:setvar="salary"scope="session"value="${2000*2}"/>

<c:iftest="${salary>2000}">

<p>Mysalaryis:<c:outvalue="${salary}"/><p>

</c:if>

</body>

</html>352)多分支判断:类似于switch语句包括:<c:choose>、<c:when>和<c:otherwise>格式:<c:choose>

<c:whentest=“条件表达式”>body</c:when><c:whentest=“条件表达式”>body</c:when>……[<c:otherwise>body</c:otherwise>]</c:choose>说明:<c:choose>只能用作

<c:when>和<c:otherwise>的父标签;<c:otherwise>放在最后位置,当所有<c:when>的条件都没有成立时,则执行<c:otherwise>。36<%@taglibprefix="c"uri="/jsp/jstl/core"%><%@pagecontentType="text/html;charset=gb2312"%><html><body><c:setvalue="${100}"var="count"/><c:choose>

<c:whentest="${count==0}">对不起,没有符合您要求的记录。</c:when>

<c:otherwise>符合您要求的记录共有${count}条.

</c:otherwise></c:choose></body>

</html>37(3)迭代操作:包括2个标签:<c:forEach>、<c:forTokens>1)<c:forEach>

功能:用于对一个集合中的元素进行循环迭代操作,或按指定的次数重

复迭代执行标签体中的内容

格式:格式1:在集合对象中迭代<c:forEach[var=“变量名”]items=“集合名”[varStatus=“迭代信息状态”][begin=“起始索引"][end=“终止索引”][step=“步长"]>

标签体内容</c:forEach>38格式2:按指定次数进行迭代 <c:forEach[var=“变量名”][varStatus=“迭代信息状态”] begin=“起始索引“end=“终止索引” [step=“步长"]>

标签体内容 </c:forEach>说明:若有begin属性,begin必须大于等于0若有end属性,必须大于begin若有step属性,step必须大于等于03940<% Stringatts[]=newString[5]; atts[0]="hello"; atts[1]="this"; atts[2]="is"; atts[3]="a"; atts[4]="pen"; request.setAttribute("atts",atts);%><c:forEachitems="${atts}"var="item"> ${item}</br></c:forEach><%Stringatts[]=newString[5];atts[0]="hello";atts[1]="this";atts[2]="is";atts[3]="a";atts[4]="pen";request.setAttribute("atts",atts);%><c:forEachitems="${atts}"var="item"begin="1"end="4"step="2">${item}</br></c:forEach>41说明:<c:forEach>还提供varStatus属性:主要用来存放现在指到成员的相关信息;varStatus属性还有另外四个属性:42 <% Stringatts[]=newString[5]; atts[0]="hello"; atts[1]="this"; atts[2]="is"; atts[3]="a"; atts[4]="pen"; request.setAttribute("atts",atts); %> <c:forEachitems="${atts}"var="item"varStatus="s"><h2> <c:outvalue="${item}"/>

的四种属性:

</h2> index:${s.index}</br> count:${s.count}</br> first:${s.first}</br> last:${s.last}</br> </c:forEach>43说明:分隔符可是一个或多个2)<c:forTokens>

功能:用来浏览一字符串中所有的成员,其成员是由定义符号

(delimiters)所分隔的

格式:

<c:forTokensitems=“迭代对象“

delims=”分隔符"

[var="varName"]

[varStatus="varStatusName"][begin="begin"][end="end"]

[step="step"]>

标签体内容

</c:forTokens>44例:<c:forTokensitems="A,B,C,D,E"delims=","var="item"> ${item}</c:forTokens><%StringphoneNumber="123-456-7899";request.setAttribute("userPhone",phoneNumber);%><c:forTokensitems="${userPhone}"delims="-"var="item"> ${item}</c:forTokens>45例:<c:forTokensitems="A,B;C-D,E"delims=",;-"var="item"> ${item}</c:forTokens><c:forEachitems="A,B,C,D,E"var="item"> ${item}</c:forEach>46(4)URL操作:包括4个标签<c:param><c:import><c:redirect><c:url>

功能:用来将其它文件的内容包含起来、网页跳转,及url的产生1)<c:param>

功能:为其它标签(<c:import>、<c:redirect>、<c:url>)

提供URL的附加参数,通常嵌入在这些标签中

格式:<c:paramname=“名字”value=“值”/>或<c:paramname=“名字”>

参数值

</c:param>47格式1:<c:importurl="url"[context="context"][var="varName"] [scope="page|request|session|application"] [charEncoding="charEncoding"]>

标签体内容

</c:import>

2)<c:import>功能:类似于<jsp:include>,但功能更加强大,向当前JSP页面中引入URL资源(可以是远程序站点上的资源)。Include指令和Include动作不能向JSP页引入Web程序以外的资源,引入的资源必须位于当前Web程序中格式:48<%@tagliburi="/jsp/jstl/core"prefix="c"%><html><body><c:importvar="data"url=""/><c:outvalue="${data}"/></body></html>493)<c:url>功能:主要用来产生一个URL,实现URL重写格式:格式1:无标签内容<c:urlvalue="value"[context="context"][var="varName"] [scope="page|request|session|application"]/>格式2:有标签内容<c:urlvalue="value"[context="context"][var="varName"][scope="page|request|session|application"]> <c:param>标签</c:url>50<c:urlvalue=“http://localhost:8080/el/index.jsp”var=“NewURL”>

<c:paramname=“name”value=“zero”/>

<c:paramname=“age”value=“28”/>

</c:url>

<ahref=“${NewURL}”>点击</a>

生成的URL:http://localhost:8080/el/index.jsp?name=zero&age=2851<%@pagecontentType="text/html;charset=GBK"%><%@taglibprefix="c"uri="/jsp/jstl/core"%><html><body><c:outvalue="url标签使用"></c:out><h4>使用url标签生成一个动态的url,并把值存入session中.</h4><hr><c:urlvalue=":8080"var="url"scope="session"></c:url><ahref="${url}">Tomcat首页</a></body></html>524)<c:redirect>功能:实现URL跳转格式:格式1:无标签内容

<c:redirecturl="url"[context="context"]/>格式2:有标签内容<c:redirecturl="url"[context="context"]> <c:param> </c:redirect>Test.jsp<%@taglibprefix="c"uri="/jsp/jstl/core"%>

<%@pagecontentType="text/html;charset=gb2312"language="java"%>

<html>

<body><c:urlvalue="tom.jsp"var="nextpage"><c:paramname="name"value="hellking"/></c:url>

<c:redirecturl="${nextpage}"/>

</body>

</html>Tom.jsp<%@pagecontentType="text/html;charset=GB2312"%><HTML><BODY>欢迎您!<%=

request.getParameter("name")%><BR></HTML></BODY>4.XML标签库简介XML标签库分类上述标签的基本功能:<x:parse>:解析XML文件;

<x:out>:在<x:parse>解析后保存的变量中取得指定的XML文件内容,并显示在页面;

<x:set>:将某个XML文件中元素的实体内容或属性保存到变量中;

<x:if>:由XPath的判断得到结果,根据情况决定是否显示其标签所包含的内容;

<x:choose>、<x:when>和<x:otherwise>:通常会放在一起使用,功能跟核心标签库中的<c:choose>、<c:when>和<c:otherwise>相似,也是提供“if-elseif”语句的功能;

<x:forEach>:对XML文件元素进行循环控制。<%@pagelanguage="java"import="java.util.*"contentType="text/html;charset=gb2312"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/xml"prefix="x"%><html><head><title><c:outvalue="<x:Parse>、<x:out>标签示例"/></title></head><body><fontsize="2">

<c:outvalue="<x:Parse>、<x:out>标签示例"/><br><c:import

var="doc"url="Students.xml"charEncoding="gb2312"/><x:parsevar="studentDoc"doc="${doc}"/><c:outvalue="学生姓名:"/><x:outselect="$studentDoc/students/student/name"/><br><c:outvalue="学生年龄:"/><x:outselect="$studentDoc/students/student/age"/><br><c:outvalue="学生性别:"/><x:outselect="$studentDoc/students/student/sex"/><br></font></body></html><?xmlversion="1.0"encoding="gb2312"?>

<students>

<student>

<name>Bill</name>

<age>23</age>

<sex>boy</sex>

</student>

</students><%@pagelanguage="java"import="java.util.*"contentType="text/html;charset=gb2312"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/xml"prefix="x"%><html><body><fontsize="2"><c:outvalue="<x:forEach>标签示例"/><br><c:importvar="doc"url="Students.xml"charEncoding="gb2312"/><x:parsevar="teacherDoc"doc="${doc}"/>

<x:forEachselect="$teacherDoc//teacher"varStatus="status"><c:outvalue="第${status.count}个老师:"/><c:outvalue="姓名"/><x:outselect="name"/><c:outvalue="年龄"/><x:outselect="age"/><c:outvalue="性别"/><x:outselect="sex"/><br></x:forEach>

</font></body></html><?xmlversion="1.0"encoding="gb2312"?><teachers><teacher><name>Bill</name><age>26</age><sex>boy</sex></teacher><teacher><name>Jack</name><age>33</age><sex>girl</sex></teacher></teachers>5.国际化标签库简介国际化标签库简介<%@pagelanguage="java"pageEncoding="gbk"%><%@taglibprefix="c"uri="/jsp/jstl/core"%><%@taglibprefix="fmt"uri="/jsp/jstl/fmt"%><html><head><title>I18N标签库</title></head><body><h4align="center"><c:outvalue="<fmt:number>标签的使用"></c:out></h4><hr><tableborder=1cellpadding="0"cellspacing="0"align="center"><tralign="center"><tdwidth="100">类型</td><tdwidth="100">使用数据</td><tdwidth="100">结果</td><tdwidth="300">说明</td></tr>

<tr><td>数字格式化</td><td>

108.75</td><td><fmt:formatNumbertype="number"pattern="###.#">108.75</fmt:formatNumber></td><td>使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。</td></tr><tr><td>数字格式化</td><td>

9557</td><td><fmt:formatNumbertype="number"pattern="#.####E0">9557</fmt:formatNumber></td><td>使用科学计数法。</td></tr><tr><td>数字格式化</td><td>

9557</td><td><fmt:formatNumbertype="number">9557</fmt:formatNumber></td>

</td><td>使用默认分组。</td></tr><tr><td>数字格式化</td><td>

9557</td><td><fmt:formatNumbertype="number"groupingUsed="false">9557</fmt:formatNumber></td><td>不使用分组。</td></tr><tr><td>数字格式化</td><td>

9557</td><td><fmt:formatNumbertype="number"maxIntegerDigits="3">9557</fmt:formatNumber></td><td>使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。</td></tr><tr><td>百分比格式化</td><td>

0.98</td><td><fmt:formatNumbertype="percent">0.98</fmt:formatNumber></td><td>用百分比形式显示一个数据。</td></tr><tr><td>货币格式化</td><td>

188.88</td><td><fmt:formatNumbertype="currency">188.8</fmt:formatNumber></td><td>将一个数据转化为货币形式输出。</td></tr><tr><td>存储数据</td><td>

188.88</td><td><fmt:formatNumbertype="currency"var="money">188.8</fmt:formatNumber><c:outvalue="${money}"></c:out></td><td>存储的money的值为${money}</td></tr></table></body></html>6.数据库标签库简介数据库标签库可以为程序员提供在JSP程序中与数据库进行交互的功能。然而,由于与数据库的交互的工作本身属于业务逻辑层,因此,数据库标签库其实是违背了多层框架的思想数据库标签库包含6个标签:<sql:setDateSource>、<sql:query>、<sql:update>、<sql:transaction>、<sql:param>以及<sql:dateParam>7.函数标签库的使用函数标签库分类:函数标签库的基本使用:<fn:length>:计算传入对象(集合或String)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论