- 浏览: 60711 次
- 性别:
- 来自: 威海
最新评论
jstl -- c标签
从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。
JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标签库目前支持四种标签:
标签 | URI | 前缀 | 示例 |
Core | http://java.sun.com/jstl/core | c | <c:tagname ...> |
XML processing | http://java.sun.com/jstl/xml | x | <x:tagname ...> |
I18N capable formatting | http://java.sun.com/jstl/fmt | fmt | <fmt:tagname ...> |
Database access (SQL) | http://java.sun.com/jstl/sql | sql | <sql:tagname ...> |
Core支持JSP中的一些基本的操作;
XML processing支持XML文档的处理;
I18N capable formatting支持对JSP页面的国际化;
Database access (SQL)支持JSP对数据库的操作。
1. <c:out>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 :<c:out> 标签是一个最常用的标签,用于在 JSP 中显示数据。 它的作用是用来替代通过 JSP 内 置对象 out 或者 <%=%> 标签来输出对象的值。
语法 :
没有Body时的语法
<c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”]/>
有Body时的语法
<c:out value=”value” [escapeXml=”{true|false}”]>
这里是Body部分
</c:out>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
value |
需要显示的值 |
Object |
Y |
Y |
Y |
无 |
用来定义需要求解的表达式。 |
escapeXml |
是否转换特殊字符 |
boolean |
Y |
Y |
N |
true |
用于指定在使用 <c:out> 标记输出诸如“ < ”、“ > ”、“ ’ ”、“ ” ”和“ & ”之类的字符(在 HTML 和 XML 中具有特殊意义)时是否应该进行转义。如果将 escapeXml 设置为 true ,则会自动的进行编码处理。 |
default |
缺省值 |
Object |
Y |
Y |
N |
无 |
当求解后的表达式为 null 或者 String 为空时将打印这个缺省值。 |
Null和错误说明
假若value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。
实例 :
------------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:out value="${sessionScope.anyValue}" default="no value" escapeXml="false"/>
该示例将从Session查找名为“anyValue”的参数,并显示在页面,若没有找到则显示“no value”。
------------------------------------------------------------------------------------------------------------------------------------------
Example2
您的用户名是: <c:out value=”${user.username}” default=”guest”/>
显示用户的用户名,如为空则显示guest
<c:out value="${sessionScope.username}"/>
指定从session中获取username的值显示;
<c:out value="${username}" />
显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示
------------------------------------------------------------------------------------------------------------------------------------------
2. <c:set>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:set>标 签用于为变量或JavaBean中的变量属性赋值的工作。这个标签用于在某个范围(page、request、session、application 等)中使用某个名字设定特定的值,或者设定某个已经存在的javabean对象的属性。他类似 于<%request.setAttrbute("name","value");%>
语法 :
语法1: 没有body
将value的值存储至范围为scope的varName变量之中
<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
语法2: 有body
将body内容存储至范围为scope的varName变量之中
<c:set value="value" [scope="{page|request|session|application}"]>
body.....
</c:set>
语法3: 将value的值存储至target对象属性中
<c:set value="value" target="target" property="propertyNmae"/>
语法4: 将body内容的数据存储至target对象属性中
<c:set target="target" property="propertyNmae">
body....
</c:set>
Ø Null 和 错误处理:
语法3和语法4会产生异常错误,有以下两种情况:
.target 为null
.target 不是java.util.Map或JavaBean对象
假若value为null时:将由存储变量改为移除变量
.语法1: 由var和scope所定义的变量,将被移除
.若scope已指定时,则PageContext.removeAttribute(varName,scope);
.若scope未指定时,则PageContext.removeAttribute(varName);
.语法3:
.假若target为Map时,则Map.remove(property);
.假若target为JavaBean时,propertye指定的属性为null
注意: var和scope这两个属性不能使用表达式来表示,我们不能写成 scope="${ourScope}"或var="${a}"
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
value |
要被存储的值 |
Object |
true |
Y |
否 |
无
|
被计算的表达式 |
var |
变量名 |
String |
false |
N |
否 |
无
|
被导出的保存了value属性计算结果的范围变量的名称 |
scope |
范围 |
String |
true |
N |
否 |
page |
var的JSP范围 |
target |
目标 对象 |
String |
true |
Y |
否 |
无
|
要设置属性的对象。必须是JavaBean对象或java.util.Map对象 |
property |
指定target对象属性 |
Object |
true |
Y |
否 |
无
|
要设置的target对象的属性的名称 |
实例 :
------------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:set value="this is andy" var="oneString"/>
该示例将为名为“oneString”的变量赋值为“this is andy”,其作用范围为page。
------------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:set target="${cust.address}" property="city" value="$"/>
将对象cust.address的city属性值保存到变量city中。
------------------------------------------------------------------------------------------------------------------------------------------
Example3
设置不同的属性,并且指定它们的范围:
<c:set value="10000" var="maxUser" scope="application"/>
<c:set value="20" var="maxIdelTime" scope="session"/>
<c:set value="next.jsp" var="nextPage" scope="page"/>
------------------------------------------------------------------------------------------------------------------------------------------
Example4
<c:set var="bid" value="${param.bookId}"/>
<jsp:setProperty name="bookDB" property="bookId" value="${bid}" />
------------------------------------------------------------------------------------------------------------------------------------------
Example5
<% Foo foo = new Foo(); pageContext.setAttribute("foo", foo); %>
<c:out value="${foo.date}"/><br> <c:set target="${foo}" property="day" value="1"/>
<c:out value="${foo.date}"/>
------------------------------------------------------------------------------------------------------------------------------------------
3. <c:remove>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:remove>标签用于删除存在于scope中的变量。 类似于 <%session.removeAttribute(“name”)%> 、
<%request.removeAttribute(“name”)%>...
语法 :
<c:remove var="varName" [scope="{page|request|session|application}"]/>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
var |
变量名 |
String |
N |
N |
是 |
无 |
欲移除变量的名称 |
scope |
范围 |
String |
N |
N |
否 |
page |
var变量的JSP范围; 若没有指定,默认为全部查找 |
------------------------------------------------------------------------------------------------------------------------------------------
实例 :
Example1
<c:remove var="sampleValue" scope="session"/>
${sessionScope.sampleValue}
------------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:remove var="username" scope="session"/>
将username变量从session范围移除。若我们不设定scope,则<c:remove>会移除所有范围名称为username
的数据。
------------------------------------------------------------------------------------------------------------------------------------------
4. <c:catch>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:catch>动作用于捕获JSP元素在其体中抛出的异常,从而提供细粒度的错误控制, 此异常也可以保存为一个页面作用域变量。当错误发生<c:catch>和</c:catch>之间时,只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。 它包含一个var属性,是一个描述异常的变量,该变量可选。若没有var属性的定义,那么仅仅捕捉异常而不做任何事情,若定义了var属性,则可以利用var所定义的异常变量进行判断转发到其他页面或提示报错信息。
语法 :
<c:catch [var="var"]>
//可能发生错误的部分
JSP elements
</c:catch>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
var |
变量名 |
String |
N |
N |
N |
无 |
用来存储错误信息的变量 |
实例 :
------------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:catch var="importException">
<fmt:parseDate value="${param.empDate}" dateStyle="short" />
</c:catch>
<c:if test="${importException != null}">
<jsp:forward page="input.jsp">
<jsp:param name="msg" value="Invalid date format" />
</jsp:forward>
</c:if>
------------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:catch var="err">
${param.sampleSingleValue[9] == 3}
</c:catch>
${err}
当“${param.sampleSingleValue[9] == 3}”表达式有异常时,可以从var属性“err”得到异常的内容,通常判断“err”是否为null来决定错误信息的提示。
------------------------------------------------------------------------------------------------------------------------------------------
5. <c:if>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:if>动作仅当所指定的表达式计算为true时才计算其体。计算结果也可以保存为一个作用域Boolean变量。
语法 :
语法1:没有体
<c:if test=" booleanExpression "
var=" var " [scope=" page |request|session|application"]/>
语法2:有体
<c:if test=" booleanExpression ">
JSP elements
</c:if>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
test |
测试表达式 |
boolean |
Y
|
Y |
是 |
无 |
如果表达式的结果为true则执行body,false则相反 |
var |
变量名 |
String |
N |
N |
否 |
无 |
用来存储test运算后的结果,即true或false |
scope |
变量作用域 |
String |
N |
N |
否 |
page |
var变量的JSP范围 |
实例 :
<c:if test="${empty param.empDate}">
<jsp:forward page="input.jsp">
<jsp:param name="msg" value="Missing the Employment Date" />
</jsp:forward>
</c:if>
6. <c:choose>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:choose>动 作用于控制嵌套<c:when>和<c:otherwise>动作的处理,它只允许第一个测试表达式计算为true 的<c:when>动作得到处理;如果所有<c:when>动作的测试表达式都计算为false,则会处理一 个<c:otherwise>动作。<c:choose>标签没有属性,可以被认为是父标 签,<c:when>、<c:otherwise>将作为其子标签来使用。
语法 :
<c:choose>
body(<when>和<otherwise>)
</c:choose>
限制:
<c:choose>的本地内容只能有:
.空白
.1或多个<c:when>
.0或多个<c:otherwise>
属性 :
无
实例 :
----------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:choose>
<c:when test="${product.onSale}">
${product.salesPrice} On sale!
</c:when>
<c:otherwise>
${product.price}
</c:otherwise>
</c:choose>
---------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:choose>
<c:when test="${condition1}">
condition1 为 true
</c:when>
<c:when test="${condition2}">
condition2 为 true
</c:when>
<c:otherwise>
condition1和conditon2都为false
</<c:otherwise >
说明:
在同一个<c:choose>中,假如所有的<c:when>的test都不为true时,则执行<c:otherwise>的本体内容。
在同一个<c:choose>中,假若有好几个<c:when>都会true时,只能有一个<c:when>成立。
</c:choose>
----------------------------------------------------------------------------------------------------------------------------------------
7. <c:when>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 :<c:when>标签等价于“if”语句,它包含一个test属性,该属性表示需要判断的条件。
语法 :
<c:when test="testCondition">
Body content
</c:when>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
test |
测试表达式 |
boolean |
Y |
Y |
是 |
无 |
如果表达式的结果为true则执行body,false则相反 |
实例 :
8. <c:otherwise>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 :<c:otherwise>标签没有属性,它等价于“else”语句。
语法 :
<c:otherwise>
conditional block
</c:otherwise>
属性 :
无
实例 :
<c:choose>、<c:when>、<c:otherwise>标签 综合实例
<c:choose>
<c:when test="${paramValues.sampleValue[2] == 11}">
not 12 not 13,it is 11
</c:when>
<c:when test="${paramValues.sampleValue[2] == 12}">
not 11 not 13,it is 12
</c:when>
<c:when test="${paramValues.sampleValue[2] == 13}">
not 11 not 12,it is 13
</c:when>
<c:otherwise>
not 11 、12、13
</c:otherwise>
</c:choose>
9. <c:forEach>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : <c:forEach>动作将其体反复计算固定次数,或者针对一个集合中的每个元素分别计算一次体。当前元素(如果未指定集合则为当前索引)和迭代状态可以通过嵌套变量提供给体中的动作元素。
此 动作接受属性表中所列的类型集合。当前元素的类型即为底层集合的类型,仅有两个例外。对于一个基本类型的数组,当前元素将作为相应包装类 (Integer、Float等等)的一个实例提供。对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提 供。
语法 :
语法1:基于集合元素进行迭代
<c:forEach items="collection" [var="var"] [varStatus="varStatus"]
[begin="startIndex"] [end="stopIndex"] [step="increment"]>
JSP elements
</c:forEach>
语法2:迭代固定次数
<c:forEach [var="var"] [varStatus="varStatus"]
begin="startIndex" end="stopIndex" [step="increment"]>
JSP elements
</c:forEach>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
begin |
开始位置 |
int |
Y |
Y |
否 |
0 |
结合集合使用时的开始索引,从0计起。对于集合来说默认为0 |
end |
结束位置 |
int |
Y |
Y |
否 |
最后一个成员 |
结合集合使用时的结束索引(元素引要小于等于此结束索引),从0计起。默认为集合的最后一个元素。如果end小于begin,则根本不计算体集合,迭代即要针对此集合进行。 |
items |
被迭代的集合对象 |
Collection, Iterator, Enumeration, Map, 数组 |
Y |
Y |
否 |
无
|
集合,迭代即要针对此集合进行。 |
step |
步长 |
int |
Y |
Y |
|
1 |
每次迭代时索引的递增值。默认为1。 |
var |
当前项目 |
String |
N |
N |
否 |
无 |
保存当前元素的嵌套变量的名字。 |
varStatus |
循环状态 |
String |
N |
N |
否 |
无 |
保存LoopTagStatus对象的嵌套变量的名字。 |
Null 和 错误处理
.假若items为null时,则表示为一空的集合对象
.假若begin大于或等于items时,则迭代不运算
注意:
varName的范围只存在<c:forEach>的本体中,如果超出了本题,则不能取得varName的值。如:
<c:forEach items="${atts}" var="item">
</c:forEach>
${item}</br>
${item}则不会显示item的内容。<c:forEach>除了支持数组之外,还有标准的J2SE的结合类型,例如:
ArrayList,List,LinkedList,Vector,Stack和Set等等;另外包括java.util.Map类的对象,例如:
HashMap,Hashtable,Properties,Provider和Attributes。
另外<c:forEach>还提供了varStatus属性,主要用来存放现在指到成员的相关信息。例如:我们写成
varStatus="s",那么就会把信息存放到名称为s的属性当中。varStatus属性还提供另外四个属性:index,
count,fist和last,它们个自的意义如下:
属性 类型 意义 index number 现在指到成员的索引 count number 总共指到成员的总和 first boolean 现在指到成员是否为第一个 last boolean 现在指到成员是否为最后一个
|
实例 :
----------------------------------------------------------------------------------------------------------------------------------------
Example1
< %@page contentType="text/html;charset=gb2312"%>
< %@taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core"% >
<%
String atts[] = new String[5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="girl";
request.setAttritue("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>
----------------------------------------------------------------------------------------------------------------------------------------
Example2
综合实例
< select > < c:forEach items = " ${model.options} " var = "forum" > < c:choose > < c:when test = " ${forum.id == model.forumId} " > < option value = " ${forum.id} " elected > ${forum.name} </ option > </ c:when > < c:otherwise > < option value = " ${forum.id} " > ${forum.name} </ option > </ c:otherwise > </ c:choose > </ c:forEach > </ select > |
Example3
奇偶行样式
<c:forEach items="${model.page.list}" var="observer" varStatus="loop"> < tr class="row$(loop.count%2)"> <td>迭代observer</td> <td>迭代observer</td> ... </tr> </c:forEach> |
Example4
分页条1
< c:set var = "page" value = " ${model.page} " ></ c:set > < table width = "800" align = "center" cellpadding = "0" cellspacing = "0" > < tr class = "even" > < td height = "20" align = "center" colspan = "3" valign = "top" > < a href = "javascript:page(1)" class = "gr_pages" > 首页 </ a > < c:if test = " ${page.currentPage > 1} " > < a href = " javascript:page( < c:out value = " ${page.currentPage -1 } " /> ) " class = "gr_pages" > 上页 </ a > </ c:if > < c:if test = " ${page.currentPage < page.totalPage} " > < a href = " javascript:page( < c:out value = " ${page.currentPage +1 } " /> ) " class = "gr_pages" > 下页 </ a > </ c:if > < a href = " javascript:page( < c:out value = " ${page.totalPage} " default = "1" /> ) " class = "gr_pages" > 末页 </ a > 当前第 < c:out value = " ${page.currentPage} " /> / < c:out value = " ${page.totalPage} " /> 页 </ td > </ tr > </ table > |
Example5
分页条2
< div align = "center" >< span class = "all_font12" > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage=1&subareaCode= ${param.subareaCode} " class = "gr_pages" > 首页 </ a > < c:if test = " ${page.currentPage > 1 } " > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage - 1} &subareaCode= ${param.subareaCode} " class = "gr_pages" > 前页 </ a > </ c:if > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage} &subareaCode= ${param.subareaCode} " > < c:out value = " ${page.currentPage} " /></ a > < c:if test = " ${page.currentPage + 1 <= page.totalPage} " > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage + 1} &subareaCode= ${param.subareaCode} " >< c:out value = " ${page.currentPage + 1} " /></ a > </ c:if > < c:if test = " ${page.currentPage + 2 <= page.totalPage} " > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage + 2} &subareaCode= ${param.subareaCode} " >< c:out value = " ${page.currentPage + 2} " /></ a > </ c:if > < c:if test = " ${page.currentPage + 3 <= page.totalPage} " > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage + 3} &subareaCode= ${param.subareaCode} " >< c:out value = " ${page.currentPage + 3} " /></ a > </ c:if > < c:if test = " ${page.currentPage <page.totalPage} " > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage + 1} &subareaCode= ${param.subareaCode} " class = "gr_pages" > 后页 </ a > </ c:if > < a href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.totalPage} &subareaCode= ${param.subareaCode} " class = "gr_pages" > 末页 </ a > < a > 当前第 < c:out value = " ${page.currentPage} " /> / < c:out value = " ${page.totalPage} " /> 页 </ a ></ span ></ div > |
Example6
综合实例
<%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% Map map = new HashMap(); map.put("a", "12345"); map.put("b", "abcde"); out.println(map.get("a")); request.setAttribute("map",map); %> <!-- 完全迭代 --> <c:forEach items="${map}" var="mymap" > <c:out value="${mymap.key}" /> <c:out value="${mymap.value}" /> </c:forEach> <!-- 根据map的key来找到特定的值 --> <c:forEach items="${map}" var="mymap"> <c:if test="${mymap.key=='a'}"> <c:out value="${mymap.value}"/> </c:if> </c:forEach>
|
10. <c:forTokens>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : 标签可以根据某个分隔符分隔指定字符串,相当于 java.util.StringTokenizer 类。
语法 :
<c:forTokens items="stringFoTokens" delims="delimmmmiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
...body内容....
</c:forTokens>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
var |
变量名 |
String |
false |
Y |
否 |
无 |
用来存放现在指到的成员 |
items |
被迭代的字符串 |
String |
true |
Y |
是 |
无 |
被迭代的字符串
|
delims |
分隔符 |
String |
true |
N |
是 |
无 |
定义用来分割字符串的字符 |
varStatus |
循环状态变量 |
String |
false |
N
|
否
|
无 |
用来存放现在指到的相关成员信息 |
begin |
开始条件 |
int |
true |
Y |
否 |
0 |
开始的位置 |
end
|
结束条件 |
int |
true |
Y |
否 |
最后一个成员
|
结束的位置 |
step |
步长 |
int |
true |
Y |
否 |
1
|
每次迭代步长 |
限制:
.假若有begin属性时,begin必须大于等于0
.假若有end属性时,必须大于begin
.假若有step属性时,step必须大于等于1
Null 和 错误处理
.假如itmes为null时,则表示为有空的集合对象
.假若begin大于等于items的大小时,则迭代不运算
实例 :
<c:forToken items="A,B,C,D,E,F,G" delims="," var="item>
${item}
</c:forToken>
items属性也可以用EL,例如:
<%
String phonenumber="123-456-7899";
request.setAttribute("userPhone",phonenumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item">
${item}
</c:forTokens>
11. <c:import>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : 标签允许包含另一个 JSP 页 面到本页面来。jsp有两种内置机制可以将来自不同 URL 的内容合并到一个 JSP 页面:include 伪指令 和 <jsp:include> 操作。不过,不管是哪种机制,要包含的内容都必须属于与页面本身相同的 Web 应用程序 (或 servlet 上下文)。两个标记之间的主要区别在于: include 伪指令在页面编译期间合并被包含的内容, 而 <jsp:include> 操作却在请求处理 JSP 页面时进行。
core 库 的 <c:import>和 <jsp:include> 一样, <c:import> 也是一种请求时操作,它 的基本任务就是将其它一些 Web 资源的内容插入 JSP 页面中。 通过 url 属性指定将要导入内容的 URL,这个属性 是 <c:import> 的唯一一个必选属性。这里允许使用相对 URL,并且根据当前页面的 URL 来解析这个相对 URL。但是,如 果 url 属性的值以斜杠开始,那么它就被解释成本地 JSP 容器内的绝对 URL。如果没有为 context 属性指定值,那么就认为这样的绝 对 URL 引用当前 servlet 上下文内的资源。如果通过 context 属性显式地指定了上下文,那么就根据指定的 servlet 上下文 解析绝对(本地)URL。 但 <c:import> 操作并不仅仅限于访问本地内容。也可以将包含协议和主机名的完整 URI 指定 为 url 属性的值。实际上,协议甚至不仅局限于 HTTP。 <c:import> 的 url 属性值可以使 用 java.net.URL 类所支持的任何协议。
语法 :
语法1:资源的内容使用String对象向外暴露
<c:import url="url" [context="context"]
[var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
内容
</c:import>
语法2:资源的内容使用Reader对象向外暴露。
<c:import url="url" [context="context"]
varReader="varReaderName" [charEncoding="charEncoding"]>
内容
</c:import>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
url |
统一资源定位器 |
String |
true |
Y |
是 |
无 |
待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源 |
context |
上下文 |
String |
true |
Y |
否 |
无 |
当使用相对路径访问外部context资源时,context指定了这个资源的名字。 |
var |
变量 |
String |
false |
N |
否 |
无 |
参数的名字。 |
scope |
范围 |
String |
false |
N |
否 |
page |
var参数的作用范围。 |
cahrEncoding |
字符编码 |
String |
true |
Y |
否 |
无 |
输入资源的字符编码。 |
varReader |
资源 阅读器 |
String |
false |
N |
否 |
无 |
这个参数的类型是Reader,用于读取资源。 |
说明
<c:import>中必须要有 url 属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址.
<c:import>也支持FTP协议,假设现在有一个 FTP站台,地址为 ftp.javaworld.com.tw,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:
<c:import url="ftp://ftp.cse.yzu.edu.tw/data.txt" />
另外,可以在<c:import>的本体内容中使用<c:param>,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value.如:
<c:import url="http://java.sun.com" >
<c:param name="test" value="1234" />
</c:import>
这样的做法等于是包含一个文件,并且所指定的网址会变成如下:
http://java.sun.com?test=1234
实例 :
----------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:catch var="exception">
<c:import url="ftp://ftp.example.com/package/README"/>
</c:catch>
<c:if test="${not empty exception}">
Sorry, the remote content is not currently available.
</c:if>
<c:import> 操 作用来包含通过 FTP 协议访问的文档内容。此外,还使用了 <c:catch> 操作,以便在本地处理 FTP 文件传送期间可能发生的 任何错误。错误处理是这样实现的:使用 <c:catch> 的 var 属性为异常指定一个限定了作用域的变量,然后使 用 <c:if> 检查其值。如果产生了异常,那么就会对那个限定了作用域的变量进行赋值:如清单 18 中的 EL 表达式所显示的那样, 该变量的值将 不会为空。由于 FTP 文档的检索将会失败,因此会显示有关这种情况的错误消息。<c:import> 操作的最后两个(可 选的)属性是 var 和 scope 。 var 属性会导致从指定 URL 获取的内容(作为 String 值)被存储在一个限定了作用域的变量 中,而不是包含在当前 JSP 页面中。 scope 属性控制该变量的作用域,缺省情况下是页面作用域。如同我们在今后的文章中将要看到的那 样,JSTL xml 库中的标记利用了 <c:import> 这种能力,即将整个文档存储在一个限定了作用域的变量中。
还要注意的是,可以使用(可选的)嵌套的 <c:param> 标记来为正在导入的 URL 指定请求参数。与在 <c:url> 中嵌套 <c:param> 标记一样,必要时也要对参数名称和参数值进行 URL 编码。
----------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:import url="/MyHtml.html" var="thisPage" />
<c:import url="/MyHtml.html" context=”/sample2” var="thisPage"/>
<c:import url="www.sample.com/MyHtml.html" var="thisPage"/>
该示例演示了三种不同的导入方法,第一种是在同一 Context 下的导入,第二种是在不同的 Context 下导入,第三种是导入任意一个 URL 。
---------------------------------------------------------------------------------------------------------------------------------------
12. <c:url>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : 主要用来产生一个URL。
语法 :
语法1:没有本体内容
<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] >
<c:param> 标签
</c:url>
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
value |
|
String |
true |
Y |
是 |
无 |
执行的URL |
context |
|
String |
true |
Y |
否 |
无 |
相同Container下,其他web站台必须以“/”开头 |
var |
|
String |
false |
N |
否 |
无 |
储存被包含文件的内容(以String 类型存入) |
scope |
|
String |
false |
N |
否 |
page |
var变量的JSP范围 |
实例 :
<c:url value="http://www.javafan.net " >
<c:param name="param" value="value"/>
</c:url>
上面执行结果将会产生一个网址为http://www.javafan.net?param=value,我们更可以搭配 HTML 的<a>使用,如下:
<a href="
<c:url value="http://www.javafan.net " >
<c:param name="param" value="value"/>
</c:url>">Java爱好者</a>
如果<c:url>有 var属性时,则网址会被存到 varName中,而不会直接输出网址。
13. <c:redirect>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 : 可以将客户端的请求从一个 JSP 网页导向到其他文件。
语法 :
语法1:没有本体内容
<c:redirect url="url" [context="context"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:redirect url="url" [context="context"] >
<c:param>
</c:redirect >
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
url |
统一资源定位器 |
String
|
true |
Y |
是 |
无 |
导向的目标地址,它可以是相对或绝对地址。
|
context |
上下文 |
String |
true |
Y |
否 |
无 |
相同Container下,其他web站台必须以“/”开头 |
实例 :
<c:redirect> 的功能不止可以导向网页,同样它还可以传递参数给目标文件。如:
<c:redirect url="http://java.sun.com">
<c:param name="param" value="value"/>
</c:redirect>
14. <c:param>
库 :Core(核心库)
URI : http://java.sun.com/jsp/jstl/core
前缀 : c
描述 :用于传递参数,用来为包含或重定向的页面传递参数。
语法 :
属性 :
属性名 |
描述 |
类型 |
是否接受动态值 |
是否支持 EL |
是否 必须 |
默认值 |
说明 |
name |
参数名 |
String
|
true |
Y |
是 |
无 |
传递的参数名
|
value |
参数值 |
String |
true |
Y |
否 |
无 |
传递的参数值(可选) |
实例 :
<c:redirect url="/MyHtml.jsp">
<c:param name="userName" value=”RW” />
</c:redirect>
该示例将为重定向的“MyHtml.jsp”传递指定参数“userName=’RW’”。
相关推荐
**jstl-api-1.2.jar** 包含了JSTL的接口定义,定义了各种标签的API,比如`<c:forEach>`、`<fmt:formatDate>`等。这个jar文件通常被添加到项目的编译类路径(classpath)中,这样编译器就可以识别JSTL相关的代码,并...
1. **jstl-api-1.2.jar**:这是JSTL的API接口定义,包含了所有JSTL标签库的接口和抽象类。开发人员在编写JSP页面时需要导入这个包,以便使用JSTL提供的各种标签。这个包不包含实际的实现,而是为编译时类型检查和...
JSTL是一个标准的标签库,提供了许多预定义的标签,可以简化常见的任务,如迭代、条件判断、XML处理等,避免了在页面上过多地使用脚本let和scriptlet。 "jstl-impl-1.2.jar"和"jstl-api-1.2.jar"是JSTL 1.2版本的两...
standard.jar和jstl-api-1.2.jar是一个版本,导入时需要将两个都导入,jstl-1.2.jar是高版本的,是将低版本的两个文件合成一个了,故只需要导入一个文件即可,导入的同时在jsp文件首行写入 <%@ taglib prefix="c" ...
4. standard-1.1.2.jar:这是JSTL的Standard Taglib实现,包含了JSTL中的一些标准标签,如fmt、fn、c等标签库的实现。这些标签可以用来进行数据格式化、函数操作和控制流操作等,极大地提高了JSP页面的可读性和可...
例如,`<c:if>`, `<c:for-each>`, `<fmt:formatDate>`等都是JSTL提供的核心标签,用于条件判断、循环遍历和日期格式化等操作。通过引入`jstl-api-1.2.jar`,开发者可以清楚地知道这些标签的功能和用法,而无需关心其...
标题中的"jakarta.servlet.jsp.jstl-api-2.0.0.jar"是一个重要的Java Web开发组件,它属于JavaServer Pages(JSP)标准标签库(JSTL)的一部分,用于提供一套标准的标签来简化HTML或XML文档的生成。JSTL的主要目标是...
例如`<c:if>`, `<c:choose>`, `<c:when>`, `<c:otherwise>`, `<c:forEach>`, `<c:forTokens>`等。 2. ** fmt 标签库**:用于国际化和格式化数据,支持日期、时间、数字的格式化,以及资源包的管理。例如`...
**JSTL(JavaServer Pages Standard Tag Library)** 是一个标准的Java标签库,用于增强JSP页面的功能,简化Web开发。它提供了多种标签来处理常见的任务,如迭代、条件语句、XML处理、数据库操作等,使得JSP页面更加...
JSTL的核心标签库(core)提供了常见的控制结构,如`<c:if>`和`<c:forEach>`,用于条件判断和循环。JDBC标签库(jdbc)支持数据库操作,如查询和事务管理。XML处理标签库(fmt)则用于XML文档的解析和操作。最后,...
- **Tag Libraries**:JSTL包含多个标签库,如Core库(c:)、Format/International化库(fmt)、XML处理库(x:)、SQL操作库(sql:)等,每个库都提供了丰富的标签来处理特定任务。 - **标签的使用**:例如,`<c:...
**JSTL(JavaServer Pages Standard Tag Library)**是Java Web开发中的一种标准标签库,它为JSP页面提供了一套方便使用的标签,用于简化HTML和Java代码的结合,提高开发效率。标题提到的`jstl-1.1.0.jar`和`jstl-...
例如,JSTL中的`<c:forEach>`标签可以用来遍历集合,`<c:if>`标签用于条件判断,`<fmt:formatDate>`可以格式化日期等等。这些标签使得开发者能够更加专注于页面展示,而不是关注于底层代码实现。 接下来是`mysql-...
JSTL,全称为JavaServer Pages Standard Tag Library,是Java Web开发中的一个标准标签库,它为开发者提供了在JSP页面中处理常见任务的标签,例如迭代、条件判断、XML处理等,从而减少Java脚本的使用,提高代码的...
**JSTL(JavaServer Pages Standard Tag Library)**是Java Web开发中的一种标准标签库,主要用于简化JSP页面中的代码,提高可维护性和可读性。JSTL提供了多种核心标签,涵盖了流程控制、字符串操作、XML处理等功能...
在Java Web开发中,`javax.servlet.jsp.jstl`是一个重要的库,全称为JavaServer Pages Standard Tag Library,即JSTL(JavaServer Pages 标准标签库)。这个库提供了用于增强JSP页面功能的一系列标准标签,使得...
在实际应用中,将这两个库添加到项目的类路径中,可以方便地在JSP页面上使用JSTL标签,比如使用`<c:forEach>`进行迭代,`<c:if>`进行条件判断,或者使用`<fmt:formatDate>`进行日期格式化。这极大地提高了代码的...
JSTL,全称为JavaServer Pages Standard Tag Library,是Java服务器页面标准标签库,它为JSP开发提供了一系列预定义的标签,使得开发者可以更加便捷地进行页面逻辑控制,从而将业务逻辑与展示逻辑分离。jstl-1.2.jar...
JSTL是JavaServer Pages标准标签库,它提供了一套用于处理常见JSP任务的标签,如迭代、条件判断、XML处理等,旨在减少在JSP页面中使用Java脚本的量,使页面更加清晰和易于维护。JSTL 1.1.2版本是我们这里讨论的重点...
**JSTL(JavaServer Pages Standard Tag Library)**是Java EE平台中用于增强JSP页面功能的一组标准标签库,它的出现是为了简化JSP页面的编程,提高代码的可读性和可维护性。JSTL主要由四个核心部分组成:Core、...