2004-12-03
JSP/XML/JSTL
Jsp
和
xml
的合作
l
方式
1
:
第一个大的趋势就是以
XML
技术为前端显示层或者是后端数据层
JSP/JMS/Servlet/EJB
等
J2EE
技术为中间处理层
。
XML
技术充当数据层
l
JSP
技术与
XML
技术集成的另一个趋势就是所谓的
Tag Libraries
在
JSP
程序中的大规
模应用。
Jsp taglib
Tag
引用:
JSP
程序的运行原理根据
JSP1.2
规范的描述
JSP
程序的运行可以分为这样的几个步骤:
1、parsing,即jsp进行xml化,如:
将会被替换为
2
、
validation,
验证自定义
tag
是否存在
3
、
translation,
被翻译为一个
servlet
类
à
HttpJspPage
à
JspPage
à
Servlet(
à
表示继承
)
4
、
excution,
编译执行。
taglib
编写:
第一步:建立
tag
文件:建立一个
tag.
第二步:设计
tag
的各种属性。
第三步:编写
tagclass
和
teiclass
第四步:编写
jsp
测试。
Jsp tld
文件标志介绍:
1、
jstl
是支持事件的,可以编写
listener,
定义在
taglib
部分。
2、
tag
标记中的
teiclass
:
指定此
Tag
的
TagExtraInfo
类
tei
即是
Tag Extra Info
三个打头字母的缩写利用
TagExtraInfo
类
(
基类为
javax.servlet.jsp.tagext.TagExtraInfo
实际中必须覆盖这个类
)
可以获取一些关于
Tag
的额外信息
3、
bodycontent:
bodycontent
指定在
Tag
对之间可以包含的内容的类型比如在
标记与
标记与
标记之间可以包含哪些类型的内容这是由
bodycontent
决定的
bodycontent
可以取以下值
tagdependent, JSP, empty.
4、
tagdependent
标记体内的内容将被送到
Tag Handler
中赋给
Tag
标记体内的内容可以为空。
5、
JSP
标记体内的内容可以是
JSP
代码段也可以是普通的文本用于往客户端输出也可以是空值
6、
empty
标记体内不能含有任何内容
7、
rtexprvalue
指定
Tag
某个属性的值是否可以通过
JSP
代码段动态生成可以使用的值为
false true yes no
缺省值为
false
在本例中
jspFile
的值可以由
JSP
代码动态生成。
8、
attribute
的
type
指定
Tag
某个属性的
Java
类型,
缺省值为
java.lang.String
。
9
、
jsptag
可以引起循环。
tag
执行过程介绍:
1、
doStartTag()
l
EVAL_BODY_TAG
其意义是使得
JSP
引擎继续执行这个标记并输出执行结果
l
SKIP_BODY
:
jsp
引擎将忽略这个
tag
后部分的执行。
2、
InitBody()
初始化
Tag Body
,没有任何返回值。
3、
doAfterBody()
:
这个方法紧接着
doInitBody()
方法执行这是一个自调用式的方法。
l
SKIP_BODY
:
当它的返回值为
SKIP_BODY
时
JSP
引擎将跳出对这个
Tag
的执行执行
Tag
后面的内容
l
EVAL_BODY_TAG
:
如果
doAfterBody()
方法的返回值为
EVAL_BODY_TAG
那么
JSP
引擎会自动调用
doAfterBody()
方法直至返回值不是
EVAL_BODY_TAG
时
JSP
引擎才会跳出这个执行循环
4、
doEndTag()
l
SKIP_PAGE
:
如果是这样的话那么
Tag
后面的所有内容都将被
JSP
引擎自动跳过
l
EVAL_PAGE
:
doEndTag()
方法的返回值也有可能为
EVAL_PAGE
如果是这样的话那么
JSP
引擎会继续执行该
Tag
后面的值
5、
release()
注解:
release()
方法
doEndTag()
方法无论在什么时候都将被执行
,哪怕d
oStartTag()
方法或者
doAfterBody()
方法的返回值为
SKIP_BODY
那么这两个方法的后面各步都没有机会被执行
JSP
引擎自动把它们跳过了例如当
doStartTag()
方法的返回值为
SKIP_BODY
时那么
doInitBody()
方法
doAfterBody()
方法方法都不会被执行。
Tag
常量:
Tag
接口中定义了四个:
EVAL_BODY_INCLUDE
把
Tag
的执行结果合并到某个输出流中只有
doStartTag()
方法才有可能返回这个值如果
Tag Handler
扩展了
BodyTag
接口那
么
doStartTag ()
方法不能够返回这个值。
类和接口:
开发接口:
Tag接口和TagSupport类:
BodyTag接口和BodyTagSupport类:
定义信息:
TagInfo和TagExtraInfo类:
TagLibaryInfo和TagAttributeInfo类:
其他来自网络上的内容:
定义变量:
id
database.BookDetails
true
AT_BEGIN
定义
TEI
:
定义
TEI
和定义变量的作用其实是一样的,提供一些可供
jsp script
使用的变量而已,只是这个可以更加的灵活方便一些而已。
GetVaraibleInfo
接口。