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"%>  

相关文章推荐

Qt全局热键(windows篇)(转自:http://www.cuteqt.com/blog/?p=2088)

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:Qt全局热键(window...
  • lslxdx
  • lslxdx
  • 2012-03-28 21:29
  • 1234

构造函数的继承(转自http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html)

主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。 今天要介绍的是,对象之间的"继承"的五种方法。 比如,现在有一个"动物"对象的构造函数。   function...

互联网协议入门(一)(转自:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html)

我们每天使用互联网,你是否想过,它是如何实现的?   全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不...

【hasLayout触发方式】和【hasLayout——IE中css bug的罪魁祸首】(转自:http://hi.baidu.com/oxid/blog/item/8481e6a28128b3a0caefd044.html 和 http://www.k6

【hasLayout触发方式】 IE中的HTML元素要实现透明,则其必须具备layout,这样的元素有仅可读的属性hasLayout,且其值为true。具体情况如下:body、img、table、tr...
  • lslxdx
  • lslxdx
  • 2011-05-23 19:49
  • 2068

怎么做gzip压缩(转自:http://www.siviy.com/webnews/newsshow.asp?id=510)

在网站建设或者运营中,特别是在网站优化中,我们可能会遇到一个词:“gzip压缩”。那么什么是gzip呢?怎么做gzip压缩呢? gzip是GNU zip的缩写,它是一个GNU自由软件的文件压...

asp.net内置对象(转自:http://zhoufoxcn.blog.51cto.com/792419/166803)

RequestResponseServerSessionCookieApplication及表达式        准确地说,asp.net并没有内置对象这一说,jsp里确实把request、respo...

asp.net内置对象(转自:http://zhoufoxcn.blog.51cto.com/792419/166803)

RequestResponseServerSessionCookieApplication及表达式        准确地说,asp.net并没有内置对象这一说,jsp里确实把request、respo...

http://www.useragentman.com/blog/2010/07/27/creating-cross-browser-html5-forms-now-using-modernizr-w

Creating Cross Browser HTML5 Forms Now, Using modernizr, webforms2 and html5Forms July 27th, 2010 b...

c++ string http://www.byvoid.com/blog/cpp-string/

C++ string 详解 任何人对本文进行引用都要标明作者是Nicolai M.Josuttis ////////////////////////////////////////////...

http://www.ruanyifeng.com/blog/2015/07/flex-examples.html

Flex 布局教程:实例篇 作者: 阮一峰 日期: 2015年7月14日 上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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