jstl in action 第二章(转自http://www.blogcn.com/blog/trackback.asp?mydiary=23140875)

转载 2007年09月13日 08:59:00
第二章:xml、jsp基础

本章内容:
I.xml基本语法
II.jsp介绍
III.context中的jstl标签库
IV.jsp范围变量

2-1xml介绍

首 先要提一下html。html拥有一套标签,如<img>,标签拥有修饰符或成为属性(attribute)。如在<img>标 签中的src="/dir/a.jpg"。html标签拥有一定的结构,如不能出现在之前。因此,我们可以说,html是一个标签、标签属性和结构规则的 集合。

html是xml的一个特定应用,不过它的规则比xml要宽泛,同样,xml也不像html那样描述特定的一套标签或标签间的关系。它描述的是文档中定义标签的规则。

2-1-1标签术语学

        |--start tag------<c:froEach bein="2" end="5" var="i">
        |
element |--body(content)--Current:<c:out value="${i}"/><br/>
        |
        |--end tag--------</c:forEach>

任何一个元素包括起始标签、内容和结束标签。有时,xml使用者会混淆元素和标签的概念,请记住,标签是在字符<>之间的文本。

空元素
起始和结束标签间没有内容的元素可以表示为
<lonely></lonely>
<lonely/>

属性

起始标签、空元素标签可以有属性,但请注意:结束标签不可有属性,一个标签内的属性不能重复。如:
<name firstName="true">Alex</name>正确
<name>Alex</name firstName="true">错误
<name firstName="true" firstName="true"/>错误

现在分析一下如下标签:

<c:forEach items="${collection}">

c命名空间前缀
forEach标签名
items属性名
${collection}属性值

命名空间

名 目空间是xml拥有而html不具备的特色。我们可以把xml命名空间视作组织标签的一种方式。在html中,所有的标签拥有简单直接的名字,例如 table。在xml中则有命名空间的限制。也就是说,标签不再是简单的名字,而是加上了命名空间的前缀。格式是<prefixName: tagName>

你可以通过命名空间的形式去限制单一文档中不同地方的大量标签。例如:

<宾馆:洗衣机>和<家庭:洗衣机>

不同的命名空间将上述标签区别开来,而在绝大部分场合,通过attribute来实现两者的区别是没有效率的。

在使用jstl中,我们不需要懂得很多关于命名空间的只是。然而,所有的jstl标签都使用了命名空间前缀。例如c:forEach,c指向一个命名空间而forEach声明了一个拥有该命名空间的特定标签。

元素间的关系

一个元素可以包含另一个元素。外部元素为父,内部元素为子。通常我们成为父标签和子标签,而不是父元素和子元素。

一个子元素不能拥有多个父元素而一个父元素可以有多个子元素。在下面的例子中:<a>是<c>的祖先,<c>是<a>的子孙。

<a>
<b>
<c/>
</b>
</a>


2-1-2相关xml法则

在此我们将讨论xml语法规则中jstl需要用到的部分。
意识到html规则比xml规则松散是很重要的。下表比较了html和xhtml的区别

法则:

I.属性值不惜标注引号
html <p align=left>
xhtml <p align="left">

II.区分大小写
html <p ALIGN=left>
xhtml <p align="left">

III.起始标签必须结束
html <p>content
xhtml <p>content</p>

IV.空元素必须有结束标记
html <br>
xhtml <br/>

html有相对随意的书写方式,在你使用jstl生成html文档的时候,你仍然可以这样做,<p ALIGN=left>不会产生任何问题,但是,不要把这种习惯带入jstl语句中。


围绕属性值的引号可以是单引号也可以是双引号。在下面的情况中,两者混合使用:值为12",则<ruler length='12"'>

如果属性值包含'和"两者,那么,可以使用转义符号
'对应&apos;
"对应&quot;
我们不需要记住很多的细节,下列的对应列表就足够了:
<  &lt;
& &amp;
> &gt;

还需要注意的一点是:标签不能交叉。如下是错误的:
<a>
<b>
</a>
</b>

2-2jsp介绍

笔者注:此处的翻译从略,仅做一个浏览,列出跟jstl关系较大的索引,具体jsp内容请参考网上众多资料,在此不再赘述。

2-2-1jsp tags集合

jsp tags
|
|__standard tags(core jsp tags)
|
|__other tags(tag libraries)
     |
     |__(include)_jstl tags


2-2-2 standard tags

I.jsp tags能够存在于hmtl tag或jsp tags中。如:

<a href="<c:out value="#">">a link</a>

II.jsp tags于静态模板文本工作方式不同。jsp tag和html tag的最大区别在于它有命名空间前缀。

core jsp tags均有jsp的命名空间前缀,例如<jsp:forward>和<jsp:include>,由于core jsp tags出现时间比jstl要早几年,所以形成了上表所描述的稍微令人困惑的集合形式。


IV.<jsp:include page="test.jsp">仅能include本地文件,即同一个jsp引擎。
值得注意的是:html的<base>标签。在html文档中,如果有下列标签<base href="::URL::http://www.aleyxchow.com/"/>,那么象<img  src="image.jpg"/>将导致浏览器载入::URL::http://www.aleyxchow.com/image.jpg;但是对于<jsp:include>而言,<base>无效,include仅查找本地服务器上的文件。

V.标签<jsp:forward>也有与<jsp:include>同样的限制。
注意,如果A.jsp forward to B.jsp,那么,B.jsp文件不能通过该标签forward to A.jsp

VI.<%@include%>与<jsp:include>的区别
关键区别在于<%@include%>找到目标文件并将它插入到当前jsp文件中,就好像你通过文本编辑器的copy/paste操作一样。相反,<jsp:include>在当前jsp页面执行的时候定位文件。这种区别产生了不同的行为:
假设有a.jsp,在a中include文件b,那么
1)
<%@include%>如果b改变,a不会发现b的改变直到a也发生改变。
<jsp:include>马上察觉到变化。

2)
<%@include%>b是基本的文本,jsp片断等,不能是一个java servlet
<jsp:include>允许包括servlet

3)
<%@include%>在某些情况下要比<jsp:include>更有效率,但是它占用更多的硬盘空间。当然,在此,两者的执行效率不太重要。

4)
<%@include%>a、b是整合在一起的文件,所以可能产生变量名等的冲突问题。它们必须保持一致。
<jsp:include>可以对不同的变量使用相同名字,对同一个标签库使用不同前缀,a、b是相互独立的文件。


2-2-3jsp tag libraries

标签库使用与jsp:不同的前缀,它们必须在使用前用伪标签(pseudo-tag)作为定向(directive)导入。

定向不是很严格的遵循类xml语法。例如:
<%@ taglib %>

使用标签库前,你必须明确它的uri,在此,它的功用不是从网上下载任何资源,而是用于区别不同的标签库。

<%@ taglib uri="::URL::http://www.acme.com/custom.tld"  prefix="acme" %>

标签库被uri所标志,使用acme作为前缀。在当前文档中,标签<create>就应该被写作:<acme:create>。在jstl中定义的前缀只是为了便于他人阅读你的源码而推荐使用的,你完全可以自己定义。

jstl标签库

I.核心库
名称 core library
前缀 c
URI  ::URL::http://java.sun.com/jstl/core
例子 <c:forEach>
用途 访问调制内存中数据,条件判断,迭代

II.xml处理库
名称 xml prcessing liberary
前缀 x
URI  ::URL::http://java.sun.com/jstl/xml
例子 <x:forEach>
用途 解析xml文档,输出xml文档中的元素,基于xml的内容做判断

III.国际化&格式化
名称 inernationalization(i18n) & formatting library
前缀 fmt
URI  ::URL::http://java.sun.com/jstl/fmt
例子 <fmt:formatDate>
用途 读取输出数字,日期,多语言下显示

IV.数据访问
名称 database(sql) access
前缀 sql
URI  ::URL::http://java.sun.com/jstl/core
例子 <sql:query>
用途 辅助数据库交互

jstl库的调用如下格式:

<@ taglib prefix="c" uri="::URL::http://java.sun.com/jstl/core "%>
<@ taglib prefix="x" uri="::URL::http://java.sun.com/jstl/xml "%><@ taglib prefix="fmt" uri="::URL::http://java.sun.com/jstl/fmt "%><@ taglib prefix="sql" uri="::URL::http://java.sun.com/jstl/sql"%>  

【Spring】【笔记】《Spring In Action》第二章 Bean装配

2.1 声明Bean 2.1.1 创建Spring配置 XML文件方式注解方式      在XML文件中声明Bean时,Spring配置文件的根元素是来源于Spring beans 命名空间所定义的...
  • KEY0323
  • KEY0323
  • 2016年05月22日 16:50
  • 483

如何使用JSTL来读取Action中的变量

我们知道,JSTL默认是从page,request,session,application这四个Scope逐次查找相应的EL表达式所对应 的对象的值。那么如果要使用JSTL来读取Action中的变量,...
  • dddddz
  • dddddz
  • 2013年03月19日 13:11
  • 1227

Netty In Action中文版 - 第二章:第一个Netty程序

Netty In Action中文版
  • abc_key
  • abc_key
  • 2014年07月05日 22:47
  • 16081

十一.javaweb之JSTL标签

1 JSTL简介 JSP虽然为我们提供了EL表达式用来替代JSP表达式,但是由于EL表达式仅仅具有输出功能,而不替代页面中的JSP脚本片段。 为了解决这个问题,JSP为我们提供了可以自定...
  • yuexianchang
  • yuexianchang
  • 2017年04月23日 22:58
  • 807

Camel In Action 第三章 数据转换

第三章 数据转换 本章包括: 使用EIPs和Java两种方式装换数据 转换XML格式的数据 通用数据格式装换 编写转换器 理解Camel的类型装换机制 在现实生活中,人们说不...
  • daydaylearn
  • daydaylearn
  • 2016年11月01日 11:25
  • 1767

jsp中引用的jstl 和fmt标签

JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标...
  • superdog007
  • superdog007
  • 2014年08月17日 15:21
  • 15858

Java jsp页面中jstl标签详解

JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。   ...
  • u013074999
  • u013074999
  • 2016年10月13日 22:08
  • 1380

JSTL、JAVA将浮点数字输出格式化

由于EL表达式的运算结果是浮点数时(而且EL表达式的除运算结果也是浮点数,这和其他语言还有点不一样),在网页上显示一长串确实不雅。使用JSTL的fmt标签,可以实现对数字、货币、时间……的格式化显示。...
  • johnstrive
  • johnstrive
  • 2013年01月11日 01:50
  • 9584

jstl根据字符串进行判断

惯例: 我是温浩然: 先说需求: 调用接口,传过json数据,对其进行解析,数据中,有url一栏,不确定是    mp4,还是jpg。 需要分析这个url,然后再页面上,根据类型显示图片或者视...
  • u012246342
  • u012246342
  • 2015年09月24日 14:57
  • 1156

博客网站(8)-博客的撰写页面

添加修改文章,表单数据的传递,对数据库的操作
  • qq_34838643
  • qq_34838643
  • 2017年03月19日 14:48
  • 279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jstl in action 第二章(转自http://www.blogcn.com/blog/trackback.asp?mydiary=23140875)
举报原因:
原因补充:

(最多只允许输入30个字)