- 浏览: 206091 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
coderlu:
嗯,在CentOS里试验成功。
Linux 防火墙端口设置 -
hiberatejss:
不错,挺方便的
MyEclipse 代码提示快捷键设置 -
xlyang0505:
只能用html吗,貌似我还是没搞定
Dojo 入门 -
yangpeihai:
...
Linux 防火墙端口设置 -
dingherry:
请问MSJAVA.dll该放在什么路径下?
java.lang.UnsatisfiedLinkError: Unable to load library
标签库Taglib
标签被定义和分布在一个称为标签库的结构中,一个标签库是由元信息和类组成的集合:
1.标签处理器:实现定制标签功能的Java类。
2.标签附加信息(TEI):向JSP容器提供边辑以确认标签属性和创建变量的类。
3.标签库描述器(TLD):描述单个标签和整个标签库属性的XML文档。
标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的地方。标签库描述器可在URL指定的符意位置。JSP1.1规范要求JSP容器接受一个打包成因定结构的JAR文件的标签库。TLD必须是/META-INF目录中名为taglib.tld的文件,JAR文件则复制到/WEB-INF /lib目录下。
一、标签实现
1.开发步骤
a.定义标签的名字、属性、声明的变量和标签体的内容。
b.编写标签库描述器TLD。
c.编写标签处理器。
d.在JSP页面中使用标签。
2.JSP页面在JSP容器中的转换步骤:
JSP页面存在三种形式:jsp文件、java文件和class文件。
a.指令元素、和向JSP容器提供转换时信息。
b.HTML行在_jspService()方法中依顺序转换到out.print()语名中。
c.脚本元素的声明被原封不动地复制到_jspService()方法外的源码中。
d.脚本元素的表达式在_jspService()方法中依顺序转换到out.print()语名中。
e.脚本元素的Scriptlet被原封不动地复制到_jspService()方法中。
f.行为元素被转换为执行其功能的运行时逻辑代码。
g.定制标签被扩展到调用其相应标签处理器中方法的Java语句中。
3.标签在JSP容器中的转换步骤:
a.JSP容器使用taglib指令元素定位标签库描述器,将页面中用到的定制标签和TLD相匹配。
b.读取标签库描述器的标签列表和每一标签相关的类名字。
c.在页面中遇到一个标签时,查找与具有指定名字的标签前缀相关的一个标签库。
d.容器使用在TLD中找到的标签结构信息生成一系列完成标签功能的Java语句。
二、标签库描述器(TLD)
标签库描述器是一个描述整个标签库标记信息和库中每个标签处理器及其属性的XML文档。
标签库描述器的DTD由一个简单的元素组成,此元素包含下列一些子元素。
整个标签库标记信息
tlibversion 标签库版本号。是一个点式十进制数,最多为4组小数点分隔的数字组成。
jspversion 标签库所需的JSP规范最低版本。例如JSP1.1
shortname 标签库的缩写名。JSP可以使用该名字作为库中标签的缺省前缀。
uri 标签库唯一URI的元素。典型URL位置来自可下载taglib的位置。
info 标签库描述信息。
每个标签处理器及其属性
tag 在TLD中加入标签,描述组成库的每个标签。
name 与标签库的名字前缀一起使用的标签的名字, 是JSP容器唯一的标签标识。
tagclass 实现标签的标签处理器类的全名。
teiclass 标签附加信息(TEI)类的全名。TEI类给出关于标签处理器创建变量及对标签司性执行的任意有效性验证的信息。
bodycontent 描述标签处理器如何使用标签体的内容。有三种取值:
empty:表示标签体必须为空;
JSP:表示脚本元素和模板及其它标签一样被评估。
tagdependent:体内容被原封不动写入BodyContent,其它脚本元素以源码形式出现,而不被JSP容器解释。
info 标签的人工可读描述性信息。
attribute 使用标签时被编码的属性信息。用于定义标签的属性。
属性名:属性的名字。
true|false:属性在标签用到的位置是否要被编码。
true|false:属性值能否用表达式指定。
三、标签处理器
标签处理器是通过实现JSP容器调用的一系列预定义方法执行定制标签行为的一个Java类。
标签处理器实现了标签的行为,标签处理器是Java类。
1.标签处理器的工作方式
a.导入javax.servlet.jsp和javax.servlet.jsp.tagext包。
b.实现javax.servlet.jsp.tagext包中的Tag接口或BodyTag接口。BodyTag是Tag的子接口。
c.继承TagSupport类或BodyTagSuppoert类。它们是上述接口的缺省实现。
d.重载public int doStartTag()throws JspException方法。
2.标签处理器的接口与实现
javax.servlet.jsp.tagext.Tag是实现标签的最基本的接口。
javax.servlet.jsp.tagext.TagSupport是实现Tag接口的具体类。
通常情况下继承tagSupport类而不直接实现Tag接口通常是有益的。除了对所有必需方法提供了缺省实现外、还保存了pageContext对象及对嵌套标签的支持。
Tag接口包含4个常量,表示doStartTag()和doEndTag()方法可能的返回码。
EVAL_BODY_INCLUDE 当doStartTag()返回时,指明servlet应对标签体进行评估。
SKIP_BODY 当doStartTag()返回时,指明servlet应忽视标签体。
EVAL_PAGE 当doEndTag()返回时,指明页面其余部分应被评估。
SKIP_PAGE 当doEndTag()返回时,指明页面其余部分就被跳过。
Tag接口的方法
public void setPageContext (PageContext ctx) 生成的servlet在请求处理器执行其它任务前首先调用此方法,实现类应保存上下文对象以便它可以在标签生命期中使用。从页面上下文中标签处理器可以访问所有JSP隐含对象。
public void setParent(Tag p) 使用一个标答可以找到操作栈中它上面的标签。在setPageContext后立即调用。
public Tag getParent() 返回父标签。
public int doStartTag() throws Jsp 在设置了页面上下文、父标签和开始标记中编码的属性后调用。返回码表明JSP实现servlet是否就评估标签体。
public int doEndTag()throws JspException 当遇到结否标记时调用。返回码表明JSP是否就继纽页面的其余部份。
public void release() 确保在页面退出前被调用。释放资源并重置标签处理器状态。
TagSupport类的方法
public static Tag finAncestorWithClass(Tag thisTag, Class cls) 为所需的父标签处理器查找运行时标签栈。一个标签处理器可以提供其范围内子标签调用的方法。
public void setId(String id) 保存和检索在id属性中指定的名字。
public void setValue(String name, Object o) 在本地哈希表中设置指定名字的值。
public Object getValue (String name) 从本地哈希表中获取指定名称的值。
public void removeValue (String name) 从本地哈希表中删除指定名称的值。
public Enumeration getValues() 返回哈希表中关键字的一个枚举。
3.标签处理器的生命期
a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。
b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果标签具有属性,属性的取值通过处理器提供setter方法传入到对象。属性setter方法是一个标签支持属性所需的唯一方法。
d.页面的上下文和父标签已被调置,并已具备属性。此时调用标签处理器的doStartTag()方法,该方法可以读取这些变量并执行实现标答功能所需的计算和操作。doStartTag()方法必须返回一个整型数。返回EVAL_BODY_INCLUDE则正常处理标签体,返回SKIP_BODY则从初始JSP页面中直到此标签结束标记处的内容均被忽略。
e.标签体被评估或忽视后调用标签处理器的doEndTag()方法,返回EVAL_PAGE则页面的其余部分被评估,返回SKIP_PAGE则servlet代码立即从_jspService()中返回。
4.体标签处理器的接口与实现
javax.servlet.jsp.tagext.BodyTag是Tag的子接口。
javax.servlet.jsp.tagext.BodyTagSupport是实现BodyTag类。
BodyContent是javax.servlet.jsp.JspWriter的子类,但与其父类有所区别。
BodyContent对象的内容不自动写了入servlet的输出流,而是积累在一字符串缓存中。当标签体完成后其对象仍可在doEndTag()方法中可以应用,由getString()或getReader()方法操作。并在必要时修改及写入恢复的JspWriter输出流。
BodyContent类的方法
public void flush()throws IOException 复写JspWrite.flush()方法以便它总是产生溢出。刷新写入已失效,因为它没有连接到将被写入的实际输出流中。
public void clearBody() 重置BodyContent缓存为空。
public Reader getReader() 返回Reader读取体内容。
public String getString() 返回包含体内容的一个字符串。
public void writeOut(Write w) 将体内容写入指定输出。
public JspWrite getEnclosing Write() 返回栈中下一个更高的写入者对象(可能是另一个BodyContent对象)。
BodyTag接口定义了一个新的整型常量
EVAL_BODY_TAG 当doStartTag()返回时,使得新的BodyContent对象被创建并与此标签处理器相关联。当doAfterBody()返回时,使得JSP servlet在修改完此标签控制的任意变量后再次评估体。
BodyTag接口的方法
public void setBodyContern (BodyContent out) 在当前JspWriter已被写入,一个新的BodyContent在被创建后由Jsp servlet调用,它发生在doStartTag()之后。
public void doInitBody() throws JspException setBodyContent()之后,体被评估前调用的生命期方法。如果多次评估体,此方法只调用一次。
public init doAfterBody() throws JspException 体被评估后,BodyContent写入者仍处于激活状态时调用的生命期方法。此方法必须返回EVAL_BODY_TAG或SKIP_BODY,若返回 EVAL_BODY_TAG时体再次被评估。
BodyTagSupport类的方法
public int doStartTag() throws JspException 复写TagSupport中的doStartTag()方法。
public int doEndTag() throws JspException 调用TagSupport中的doEndTag()方法,返回结果。
public void setBodyContent (BodyContent out) 在一保护成员变量bodyContent中保存新的体内容对象,子类可直接访问此对象。
public void doInitBody() throws JspException 缺省什么都不做。被需要执行初始化的子类所复写。
public int doAfterBody() throws JspException 每次体被评估后由JSP servlet调用,体同容对象仍处于激活状态。返回SKEP_BODY或EVAL_BODY_TAG则体再次被评估
public void release() 设置bodyContent对象为null,然后调用super.release()。
public BodyContent getBodyContent() 返回bodyContent变量。子类已经可以访问保护变量,但此方法允许无关的标签处理类对此体内容发送输出。
public JspWriter getPreviousOut() 在bodyContent变量上调用getEnclosingWriter()并返回结果的简便方法。
5.体标签处理器的生命期
a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。
b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果标签具有属性,属性的取值通过处理器提供setter方法传入到对象。属性setter方法是一个标签支持属性所需的唯一方法。
d.页面的上下文和父标签已被调置,并已具备属性。调用标签处理器的doStartTag()方法,该方法可以读取这些变量并执行实现标答功能所需的计算和操作。
doStartTag()方法必须返回一个整型数。
返回EVAL_BODY_TAG则正常处理标签体(跳到e);
返回SKIP_BODY则从初始JSP页面中直到此标签结束标记处的内容均被忽略。(跳到f)
e.如果返回EVAL_BODY_TAG时,则正常处理标签体。
e1.在栈中保存当前的JspWriter对象,创建新的BodyContent对象,并将其置为JSP页面的out对象保存在上下文范围内名为name的属性中。并调用它的setBodyContent()方法。
e2.调用doInitBody()方法进行初始化。
e3.处理标签体。将输出写入BodyContent对象中,此过程依赖于TLD的标签元素,有三种可能取值。
e4.调用doAfterBody()方法,将体内体内容写入JspWriter,可如下实现:
JspWriter out=bodyContent.getEnclosingWriter();
out.println(bodyContent.getString());//bodyContent.writeOut(out);
bodyContent.clear();
e5.doAfterBody()方法返回两种可能:
返回EVAL_BODY_TAG时,再对标签体进行评估,这是数组和枚举被循环处理的典型情况。
返回SKIP_PAGE时,继续页面的其余部份。
e6.体内容完成,因此创建它的过程被反向:
调用pageContent.popBody()方法检索前面的JspWriter对象。
将写入者设置回out隐含对象。
f.标签体被评估或忽视后调用doEndTag()方法,允许标签处理器像输出流发回内容。
返回EVAL_PAGE则页面的其余部分被评估;
返回SKIP_PAGE则servlet代码立即从_jspService()中返回。
g. 此时体的内容在受保护的bodyContent对象中仍然可用。
可以将它写入servlet输出流中:
JspWriter out=pageContext.getOut();
out.println(bodyContent.getString());
或者
bodyContent.WriteOut(pageContext.getOut());
6.标签附加信息类
四、标签指令
taglib指令元素的目的是指定TLD的位置,设置在页面上与标签区分开来的一个短别名。
语法:
属性:prefix:用于标识标签库的唯一标识。uri:标签库本身的URI。
uri不必指向一个实际文件,它是JSP容器可以在web.xml中查找实际文件位置的唯一标识符。
--------------------------------例子-------------------------------------------
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
对应uri引用jsf-impl.jar下META-INF/jsf-core.tld文件
标签被定义和分布在一个称为标签库的结构中,一个标签库是由元信息和类组成的集合:
1.标签处理器:实现定制标签功能的Java类。
2.标签附加信息(TEI):向JSP容器提供边辑以确认标签属性和创建变量的类。
3.标签库描述器(TLD):描述单个标签和整个标签库属性的XML文档。
标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的地方。标签库描述器可在URL指定的符意位置。JSP1.1规范要求JSP容器接受一个打包成因定结构的JAR文件的标签库。TLD必须是/META-INF目录中名为taglib.tld的文件,JAR文件则复制到/WEB-INF /lib目录下。
一、标签实现
1.开发步骤
a.定义标签的名字、属性、声明的变量和标签体的内容。
b.编写标签库描述器TLD。
c.编写标签处理器。
d.在JSP页面中使用标签。
2.JSP页面在JSP容器中的转换步骤:
JSP页面存在三种形式:jsp文件、java文件和class文件。
a.指令元素、和向JSP容器提供转换时信息。
b.HTML行在_jspService()方法中依顺序转换到out.print()语名中。
c.脚本元素的声明被原封不动地复制到_jspService()方法外的源码中。
d.脚本元素的表达式在_jspService()方法中依顺序转换到out.print()语名中。
e.脚本元素的Scriptlet被原封不动地复制到_jspService()方法中。
f.行为元素被转换为执行其功能的运行时逻辑代码。
g.定制标签被扩展到调用其相应标签处理器中方法的Java语句中。
3.标签在JSP容器中的转换步骤:
a.JSP容器使用taglib指令元素定位标签库描述器,将页面中用到的定制标签和TLD相匹配。
b.读取标签库描述器的标签列表和每一标签相关的类名字。
c.在页面中遇到一个标签时,查找与具有指定名字的标签前缀相关的一个标签库。
d.容器使用在TLD中找到的标签结构信息生成一系列完成标签功能的Java语句。
二、标签库描述器(TLD)
标签库描述器是一个描述整个标签库标记信息和库中每个标签处理器及其属性的XML文档。
标签库描述器的DTD由一个简单的元素组成,此元素包含下列一些子元素。
整个标签库标记信息
tlibversion 标签库版本号。是一个点式十进制数,最多为4组小数点分隔的数字组成。
jspversion 标签库所需的JSP规范最低版本。例如JSP1.1
shortname 标签库的缩写名。JSP可以使用该名字作为库中标签的缺省前缀。
uri 标签库唯一URI的元素。典型URL位置来自可下载taglib的位置。
info 标签库描述信息。
每个标签处理器及其属性
tag 在TLD中加入标签,描述组成库的每个标签。
name 与标签库的名字前缀一起使用的标签的名字, 是JSP容器唯一的标签标识。
tagclass 实现标签的标签处理器类的全名。
teiclass 标签附加信息(TEI)类的全名。TEI类给出关于标签处理器创建变量及对标签司性执行的任意有效性验证的信息。
bodycontent 描述标签处理器如何使用标签体的内容。有三种取值:
empty:表示标签体必须为空;
JSP:表示脚本元素和模板及其它标签一样被评估。
tagdependent:体内容被原封不动写入BodyContent,其它脚本元素以源码形式出现,而不被JSP容器解释。
info 标签的人工可读描述性信息。
attribute 使用标签时被编码的属性信息。用于定义标签的属性。
属性名:属性的名字。
true|false:属性在标签用到的位置是否要被编码。
true|false:属性值能否用表达式指定。
三、标签处理器
标签处理器是通过实现JSP容器调用的一系列预定义方法执行定制标签行为的一个Java类。
标签处理器实现了标签的行为,标签处理器是Java类。
1.标签处理器的工作方式
a.导入javax.servlet.jsp和javax.servlet.jsp.tagext包。
b.实现javax.servlet.jsp.tagext包中的Tag接口或BodyTag接口。BodyTag是Tag的子接口。
c.继承TagSupport类或BodyTagSuppoert类。它们是上述接口的缺省实现。
d.重载public int doStartTag()throws JspException方法。
2.标签处理器的接口与实现
javax.servlet.jsp.tagext.Tag是实现标签的最基本的接口。
javax.servlet.jsp.tagext.TagSupport是实现Tag接口的具体类。
通常情况下继承tagSupport类而不直接实现Tag接口通常是有益的。除了对所有必需方法提供了缺省实现外、还保存了pageContext对象及对嵌套标签的支持。
Tag接口包含4个常量,表示doStartTag()和doEndTag()方法可能的返回码。
EVAL_BODY_INCLUDE 当doStartTag()返回时,指明servlet应对标签体进行评估。
SKIP_BODY 当doStartTag()返回时,指明servlet应忽视标签体。
EVAL_PAGE 当doEndTag()返回时,指明页面其余部分应被评估。
SKIP_PAGE 当doEndTag()返回时,指明页面其余部分就被跳过。
Tag接口的方法
public void setPageContext (PageContext ctx) 生成的servlet在请求处理器执行其它任务前首先调用此方法,实现类应保存上下文对象以便它可以在标签生命期中使用。从页面上下文中标签处理器可以访问所有JSP隐含对象。
public void setParent(Tag p) 使用一个标答可以找到操作栈中它上面的标签。在setPageContext后立即调用。
public Tag getParent() 返回父标签。
public int doStartTag() throws Jsp 在设置了页面上下文、父标签和开始标记中编码的属性后调用。返回码表明JSP实现servlet是否就评估标签体。
public int doEndTag()throws JspException 当遇到结否标记时调用。返回码表明JSP是否就继纽页面的其余部份。
public void release() 确保在页面退出前被调用。释放资源并重置标签处理器状态。
TagSupport类的方法
public static Tag finAncestorWithClass(Tag thisTag, Class cls) 为所需的父标签处理器查找运行时标签栈。一个标签处理器可以提供其范围内子标签调用的方法。
public void setId(String id) 保存和检索在id属性中指定的名字。
public void setValue(String name, Object o) 在本地哈希表中设置指定名字的值。
public Object getValue (String name) 从本地哈希表中获取指定名称的值。
public void removeValue (String name) 从本地哈希表中删除指定名称的值。
public Enumeration getValues() 返回哈希表中关键字的一个枚举。
3.标签处理器的生命期
a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。
b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果标签具有属性,属性的取值通过处理器提供setter方法传入到对象。属性setter方法是一个标签支持属性所需的唯一方法。
d.页面的上下文和父标签已被调置,并已具备属性。此时调用标签处理器的doStartTag()方法,该方法可以读取这些变量并执行实现标答功能所需的计算和操作。doStartTag()方法必须返回一个整型数。返回EVAL_BODY_INCLUDE则正常处理标签体,返回SKIP_BODY则从初始JSP页面中直到此标签结束标记处的内容均被忽略。
e.标签体被评估或忽视后调用标签处理器的doEndTag()方法,返回EVAL_PAGE则页面的其余部分被评估,返回SKIP_PAGE则servlet代码立即从_jspService()中返回。
4.体标签处理器的接口与实现
javax.servlet.jsp.tagext.BodyTag是Tag的子接口。
javax.servlet.jsp.tagext.BodyTagSupport是实现BodyTag类。
BodyContent是javax.servlet.jsp.JspWriter的子类,但与其父类有所区别。
BodyContent对象的内容不自动写了入servlet的输出流,而是积累在一字符串缓存中。当标签体完成后其对象仍可在doEndTag()方法中可以应用,由getString()或getReader()方法操作。并在必要时修改及写入恢复的JspWriter输出流。
BodyContent类的方法
public void flush()throws IOException 复写JspWrite.flush()方法以便它总是产生溢出。刷新写入已失效,因为它没有连接到将被写入的实际输出流中。
public void clearBody() 重置BodyContent缓存为空。
public Reader getReader() 返回Reader读取体内容。
public String getString() 返回包含体内容的一个字符串。
public void writeOut(Write w) 将体内容写入指定输出。
public JspWrite getEnclosing Write() 返回栈中下一个更高的写入者对象(可能是另一个BodyContent对象)。
BodyTag接口定义了一个新的整型常量
EVAL_BODY_TAG 当doStartTag()返回时,使得新的BodyContent对象被创建并与此标签处理器相关联。当doAfterBody()返回时,使得JSP servlet在修改完此标签控制的任意变量后再次评估体。
BodyTag接口的方法
public void setBodyContern (BodyContent out) 在当前JspWriter已被写入,一个新的BodyContent在被创建后由Jsp servlet调用,它发生在doStartTag()之后。
public void doInitBody() throws JspException setBodyContent()之后,体被评估前调用的生命期方法。如果多次评估体,此方法只调用一次。
public init doAfterBody() throws JspException 体被评估后,BodyContent写入者仍处于激活状态时调用的生命期方法。此方法必须返回EVAL_BODY_TAG或SKIP_BODY,若返回 EVAL_BODY_TAG时体再次被评估。
BodyTagSupport类的方法
public int doStartTag() throws JspException 复写TagSupport中的doStartTag()方法。
public int doEndTag() throws JspException 调用TagSupport中的doEndTag()方法,返回结果。
public void setBodyContent (BodyContent out) 在一保护成员变量bodyContent中保存新的体内容对象,子类可直接访问此对象。
public void doInitBody() throws JspException 缺省什么都不做。被需要执行初始化的子类所复写。
public int doAfterBody() throws JspException 每次体被评估后由JSP servlet调用,体同容对象仍处于激活状态。返回SKEP_BODY或EVAL_BODY_TAG则体再次被评估
public void release() 设置bodyContent对象为null,然后调用super.release()。
public BodyContent getBodyContent() 返回bodyContent变量。子类已经可以访问保护变量,但此方法允许无关的标签处理类对此体内容发送输出。
public JspWriter getPreviousOut() 在bodyContent变量上调用getEnclosingWriter()并返回结果的简便方法。
5.体标签处理器的生命期
a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。
b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果标签具有属性,属性的取值通过处理器提供setter方法传入到对象。属性setter方法是一个标签支持属性所需的唯一方法。
d.页面的上下文和父标签已被调置,并已具备属性。调用标签处理器的doStartTag()方法,该方法可以读取这些变量并执行实现标答功能所需的计算和操作。
doStartTag()方法必须返回一个整型数。
返回EVAL_BODY_TAG则正常处理标签体(跳到e);
返回SKIP_BODY则从初始JSP页面中直到此标签结束标记处的内容均被忽略。(跳到f)
e.如果返回EVAL_BODY_TAG时,则正常处理标签体。
e1.在栈中保存当前的JspWriter对象,创建新的BodyContent对象,并将其置为JSP页面的out对象保存在上下文范围内名为name的属性中。并调用它的setBodyContent()方法。
e2.调用doInitBody()方法进行初始化。
e3.处理标签体。将输出写入BodyContent对象中,此过程依赖于TLD的标签元素,有三种可能取值。
e4.调用doAfterBody()方法,将体内体内容写入JspWriter,可如下实现:
JspWriter out=bodyContent.getEnclosingWriter();
out.println(bodyContent.getString());//bodyContent.writeOut(out);
bodyContent.clear();
e5.doAfterBody()方法返回两种可能:
返回EVAL_BODY_TAG时,再对标签体进行评估,这是数组和枚举被循环处理的典型情况。
返回SKIP_PAGE时,继续页面的其余部份。
e6.体内容完成,因此创建它的过程被反向:
调用pageContent.popBody()方法检索前面的JspWriter对象。
将写入者设置回out隐含对象。
f.标签体被评估或忽视后调用doEndTag()方法,允许标签处理器像输出流发回内容。
返回EVAL_PAGE则页面的其余部分被评估;
返回SKIP_PAGE则servlet代码立即从_jspService()中返回。
g. 此时体的内容在受保护的bodyContent对象中仍然可用。
可以将它写入servlet输出流中:
JspWriter out=pageContext.getOut();
out.println(bodyContent.getString());
或者
bodyContent.WriteOut(pageContext.getOut());
6.标签附加信息类
四、标签指令
taglib指令元素的目的是指定TLD的位置,设置在页面上与标签区分开来的一个短别名。
语法:
属性:prefix:用于标识标签库的唯一标识。uri:标签库本身的URI。
uri不必指向一个实际文件,它是JSP容器可以在web.xml中查找实际文件位置的唯一标识符。
--------------------------------例子-------------------------------------------
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
对应uri引用jsf-impl.jar下META-INF/jsf-core.tld文件
发表评论
-
a 链接控制打开新窗口 无地址栏
2009-11-05 09:10 4397通过JavaScript跳转 <a href=&quo ... -
Mysql 查询优化笔记续
2009-09-08 11:11 1249上一篇笔记的粒度比较 ... -
Mysql 查询优化笔记
2009-09-03 11:06 4374项目开发初期,数据库 ... -
windows下mysql备份
2009-09-01 14:48 3124一、单机备份 1. =================== ... -
Mysql 存储过程 与触发器
2009-09-01 14:43 3146两天前同事的一个日志模块事件备份老是报内存溢出错误,正好有点时 ... -
java.lang.UnsatisfiedLinkError: Unable to load library
2009-08-26 15:34 13887项目中要引用到一个动态库,在本机MyEclipse下调 ... -
开发人员 收藏夹的网站
2009-08-20 13:07 903http://www.gotapi.com/ 语言 ... -
解决MySQL8小时自动断开连接的问题
2009-07-30 13:30 4117mysql在启动后,如果一段时间内没有活动,那么将自动 ... -
mysql 权限控制笔记
2009-07-17 10:50 1601MySQL 存取控制包含2个阶段: * 阶 ... -
项目中常遇到的问题
2009-07-17 10:22 0经历几个项目后,我们会发现需求是不断变化的,但总有一些 ... -
HTTPS 和HTTP
2009-06-04 10:12 1072HTTPS(Secure Hypertext Transf ... -
MyEclipse优化
2009-05-26 10:39 0http://hi.baidu.com/linming_08/ ... -
JDK、Tomcat和MySQL的绿色安装方法
2009-05-21 14:23 2536要制作web系统setup一键安装程序,必须先解决JDK ... -
windows 安装多个MysQL服务器
2009-05-21 14:20 1772Windows上安装多个MySQL服务器 网络上查到两个版本可 ... -
同一台Windows下安装多个Tomcat服务
2009-05-19 18:06 3068本文以apache-tomcat-6.0.18 ... -
Java EE 的异常框架
2009-05-11 10:56 0一个模拟的例子来说明异常框架的设计过程,比如我们要对外 ... -
捕捉 404/500 错误,自定义Tomcat错误页面
2009-05-11 10:49 10254当服务器出现404、500错误时候希望能够给用户友好的现实界面 ... -
框架中常用的jar包作用
2009-03-31 10:43 1522commons-digester.jar Digester基 ... -
spring包中文件及各种jar包详解
2009-03-31 10:31 1448aspectj目录下是在Spring框架下使用aspectj的 ... -
spring的jar各包作用
2009-03-31 10:29 1767spring.jar是包含有完整发布的单个jar 包,spri ...
相关推荐
标签“源码”可能指的是查看和理解EL表达式的实现细节,这涉及到对Java EE规范的理解,以及对Servlet容器如何处理EL表达式的内部工作原理的探索。通过阅读源码,开发者可以深入理解EL的工作流程,从而更好地优化和...
**JSF(JavaServer Faces)** 是Java平台上的一种开源Web应用程序框架,主要用于构建用户界面。它简化了前端和后端的交互...通过深入研究其中的内容,可以提升开发技能,更好地运用JSF来构建高效、可靠的Web应用程序。
JSF(JavaServer Faces)是Java平台上用于构建用户界面的组件模型框架,它提供了一种声明式的方式来创建和管理Web应用...通过深入研究和运行这个项目,开发者不仅可以理解JSF的基础,还能进一步掌握JavaWeb开发的技能。
根据提供的文档信息,我们可以深入探讨该附赠电子资料中涵盖的主要知识点和技术框架,特别是针对Struts2、JSF、Hibernate、iBATIS以及JPA等内容。 ### 1. Java Web开发基础 #### 1.1 JSP (Java Server Pages) JSP...
6. **库文件**:虽然在描述中提到,为了减小文件大小,`lib`目录下的`.jar`包被删除了,但JSF应用程序通常依赖于这些库,如Servlet API、EL API、JSF实现(如MyFaces或Mojarra)和其他第三方库。如果在运行时遇到...
`vijun-1.0-release(1).zip` 是一个包含JSP源码的压缩包,用于研究和学习JSP技术。JSP(Java Server Pages)是Java平台上的一种动态网页技术,它允许开发者将静态HTML与动态Java代码结合起来,从而在服务器端生成...
**JSF(MyFaces)与Tiles框架整合应用** `myfaces-example-tiles-1.1.6.rar` 是一个示例项目,它...通过深入研究这个示例,开发者可以更好地理解如何在实际项目中结合使用JSF和Tiles,提升Web应用的结构化和可维护性。
- **深入研究**: 学习JSF的高级特性,如事件处理、导航规则和国际化配置等。 - **工具支持**: 选择合适的开发工具(如Eclipse、NetBeans等)来辅助开发过程。 #### 六、总结 综上所述,JSF不仅为Web开发带来了便利...
通过对"jsfdemo"中的例子进行实践和研究,开发者可以深入理解JSF的工作原理,掌握如何构建和部署JSF应用,并熟悉如何利用Eclipse和Tomcat这样的工具链来支持开发流程。同时,也可以了解到如何结合其他Java EE技术,...
通过深入研究`javax.servlet`和`javax.servlet.jsp`的源码,开发者能够更好地掌握Web应用的构建和运行机制,提升解决问题的能力。同时,通过实践和阅读源码,可以学习到如何有效地管理请求响应、处理并发、优化性能...
**JSP(Java Server Pages)技术详解** JSP(Java Server Pages)是Java平台上的一个核心Web开发...通过深入研究JSP,开发者能够构建高效、可扩展的Web应用。希望这份资料能帮助你顺利通过JSP考试,提升Web开发技能。
通过研究这个项目的源代码,开发者可以深入理解JSF在Java EE 8中的实际应用,学习如何配置JSF环境、创建和管理bean、设计用户界面,以及如何利用新版本提供的特性来优化应用性能和用户体验。 总的来说,"definitive...
- **与 Servlet 和 JSP 的集成**: JSF 可以很好地与 Servlet 和 JSP 集成,实现更复杂的业务逻辑处理。 - **与 EJB 的集成**: 利用 EJB 进行持久化操作或其他服务层功能。 - **与 AJAX 的集成**: 通过 AJAX 支持实现...
9. **JSP 2.0及更高版本的特性**:包括引入了EL和JSTL,支持JavaServer Faces(JSF)组件,以及增强了对Servlet 2.4及更高版本的支持。 10. **Web容器**:JSP应用程序需要在Web容器(如Tomcat、Jetty等)中运行,...
3. **Eshopf**:这个版本是使用JSF框架构建的,其核心在于将原来的Servlet替换成了JSF Servlet,并对用户界面进行了重构。 #### Eshopf版本的技术特点 Eshopf版本采用了JSF框架,这使得系统的开发变得更加高效且...
**JSP程序设计精彩实例** 在IT行业中,JavaServer Pages(JSP)是一种广泛使用的动态网页技术,由Sun ...通过深入研究和分析这些实例,可以更好地理解JSP的工作原理,以及如何有效地利用其特性构建高质量的Web应用。
- **高级技巧**:对于希望进一步优化应用性能的开发者而言,建议深入研究`aa.js`的实现原理及其与其他框架(如Struts)的集成方式,以提升应用的整体稳定性和用户体验。 #### 四、总结 通过对AjaxAnywhere的配置与...
【JSP+JAVA技术概述】 JSP(JavaServer Pages)是一种...对于想深入了解Java Web开发的开发者来说,研究这样的项目源码是一个很好的学习机会,可以从中学习到如何将Java和JSP结合使用,以及如何构建简单的Web应用。
8. **EL和JSTL**:表达式语言(EL)简化了从JSP页面获取和设置Java对象属性的操作,而JSP标准标签库(JSTL)提供了一系列标准标签,减少对脚本let的依赖,使代码更加清晰。 9. **部署与运行**:JSP项目需要在支持...