作者:ma_yk 摘要 在JSP中有一种机制,可以让你在JSP页面中插入与HTML类似的标记。本文介绍JSP定制标记的基本概念和构成,以及如何开发和应用JSP定制标记。 关键字 JSP,XML,TLD,标记符 什么是标记 使用HTML语言我们可以这样去编辑我们的网页: HELLO WORLD 在这里我们把,、 等。在JSP中我们也可以定制自己的标记,以供JSP页面使用,如下例所示 在上例中就是一个JSP定制标记符。widtht、height是这个标记的属性。是一个标记库定义指令,在稍后我们将会讨论。在JSP中定制标记符,实质上就是以标记的形式封装了一个俱有独立功能的Java类。标记的使用减少了直接嵌入JSP页面的Java代码,方便了页面的布局,并且有利于代码的复用,提高了开发的效率。 JSP服务器解析标记的过程 那么当一个标记被嵌入JSP页面后,JSP服务器是如何对这个标记进行解析的呢?下面让我们一起看一下它的顺序图: 图中各对象的含义如下所示: Client: 表示客户端。 JSP-Server:JSP服务器。 JSP-Page:JSP页面。 TLD: 标记库描述文件,定义标记和标记的各种属性和处理文件等。 TagClass 标记处理程序 当一个用户访问一个JSP页面时,这个请求被发送到JSP服务器,JSP服务器会根据这个请求去调用相应的页面,如果这个页面中有自定义的标记,JSP服务就会根据页面指令 例子 描述 指令声明此JSP文件使用了自定义的标记,同时引用标记库, 也指定了他们的标记的前缀。 你必须在使用自定义标记之前使用指令。 属性 uri="URIToTagLibrary" :Uniform Resource Identifier (URI)根据标记的前缀对自定义的标记进行唯一的命名,URI可以是一个相对或绝对的路径。 prefix="tagPrefix":在自定义标记之前的前缀。如上例中的 标记符的处理程序(Tag handle) 我们还是以一个例子来看下如何实现一个Tag handle。首先是看一下它的类图: 让我们再看一下它的代码: package tagclass.login; import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.*; import java.io.*; public class login extends TagSupport { public login() { super(); } public int doStartTag() throws JspTagException { JspWriter out = pageContext.getOut(); try { out.println(""); } catch(Exception e) { } return SKIP_BODY; } publicc int doEndTag()throws JsptagException { return EVAL_PAGE; } public void release() { super.release(); } public void setWidth(String language) { this.width = width; } public String getWidth() { return this.width; } public void setHeight(String height) { this.height=height; } public String getHeight() { return this.height; } private String width; private String height; } 从以上我们可以看出,实现一个简单的标记符处理程序有几个要求:①增加一个类,使之继承java.Servlet.jsp.tagext.TagSupport类。这个类提供了java.Servlet.jsp.tagext.Tag接口所要求的所有的方法。另外,还需要使用一些基本的API,使JSP容器能够调用我们自己提供的标记符处理程序。②必须为每个标记符属性分别创建一个get和set方法,JSP容器需要使用这些方法处理程序传递参数。③要为标记符处理程序创建一个构造器和自毁器。JSP需要使用构造器启动处理程序。自毁器是在realease()方法中定义的。在处理程序的生命周期结束时,需要调用自毁器释放所占用的资源。④创建两个名为doStartTag()和doEndTag()的方法,执行具体的处理和输出动作。这两个方法是在处理自定义标记符的起始位置和结束位置调用的。它们的返回值是在Tag Interface里定义的静态int,这几个静态值分别是: SKIP_BODY隐含0 :跳过了开始和结束标签之间的代码。 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 09:25 , Processed in 0.078387 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.