jsp

位置:IT落伍者 >> jsp >> 浏览文章

JSP的自定义标签


发布日期:2020年09月17日
 
JSP的自定义标签

基本概念

标签(Tag):

标签是一种XML元素通过标签可以使JSP网页变得简洁并且易于维护还可以方便地实现同一个JSP文件支持多种语言版本由于标签是XML元素所以它的名称和属性都是大小写敏感的

标签库(Tag library):

由一系列功能相似逻辑上互相联系的标签构成的集合称为标签库

标签库描述文件(Tag Library Descriptor):

标签库描述文件是一个XML文件这个文件提供了标签库中类和JSP中对标签引用的映射关系它是一个配置文件和webxml是类似的

标签处理类(Tag Handle Class):

标签处理类是一个Java类这个类继承了TagSupport或者扩展了SimpleTag接口通过这个类可以实现自定义JSP标签的具体功能

自定义JSP标签的格式

<% @ taglib prefix=someprefixuri=/sometaglib %>

为了使到JSP容器能够使用标签库中的自定义行为必须满足以下两个条件

)从一个指定的标签库中识别出代表这种自定义行为的标签

)找到实现这些自定义行为的具体类

第一个必需条件-找出一个自定义行为属于那个标签库-是由标签指令的前缀(Taglib Directives Prefix)属性完成所以在同一个页面中使用相同前缀的元素都属于这个标签库每个标签库都定义了一个默认的前缀用在标签库的文档中或者页面中插入自定义标签所以你可以使用除了诸如jspjspxjavaservletsunsunw(它们都是在JSP白皮书中指定的保留字)之类的前缀

uri属性满足了以上的第二个要求为每个自定义行为找到对应的类这个uri包含了一个字符串容器用它来定位TLD文件在TLD文件中可以找到标签库中所有标签处理类的名称

当web应用程序启动时容器从WEBINF文件夹的目录结构的METAINF搜索所有以tld结尾的文件也就是说它们会定位所有的TLD文件对于每个TLD文件容器会先获取标签库的URI然后为每个TLD文件和对应的URI创建映射关系

在JSP页面中我们仅需通过使用带有URI属性值的标签库指令来和具体的标签库匹配

自定义JSP标签的处理过程

.在JSP中引入标签库

<% @ taglib prefix=taglibprefix uri=tagliburi %>

.在JSP中使用标签库标签

.Web容器根据第二个步骤中的prefix获得第一个步骤中声明的taglib的uri属性值

.Web容器根据uri属性在webxml找到对应的元素 .从元素中获得对应的元素的值 .Web容器根据元素的值从WEBINF/目录下找到对应的tld文件 .从tld文件中找到与tagname对应的元素 .凑元素中获得对应的元素的值 .Web容器根据元素的值创建相应的tag handle class的实例 Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理

创建和使用一个Tag Library的基本步骤

创建标签的处理类(Tag Handler Class)

创建标签库描述文件(Tag Library Descrptor File)

在webxml文件中配置元素 在JSP文件中引人标签库

TagSupport类简介

处理标签的类必须扩展javaxservletjspTagSupport

TagSupport类的主要属性

Aparent属性代表嵌套了当前标签的上层标签的处理类

BpageContex属性代表Web应用中的javaxservletjspPageContext对象

JSP容器在调用doStartTag或者doEndTag方法前会先调用setPageContext和setParent方法设置pageContext和parent因此在标签处理类中可以直接访问pageContext变量

在TagSupport的构造方法中不能访问pageContext成员变量因为此时JSP容器还没有调用

setPageContext方法对pageContext进行初始化

TagSupport处理标签的方法

TagSupport类提供了两个处理标签的方法

public int doStartTag() throws JspException
public int doEndTag() throws JspException

doStartTag但JSP容器遇到自定义标签的起始标志就会调用doStartTag()方法

doStartTag()方法返回一个整数值用来决定程序的后续流程

ATagSKIP_BODY表示?>…之间的内容被忽略

BTagEVAL_BODY_INCLUDE表示标签之间的内容被正常执行

doEndTag但JSP容器遇到自定义标签的结束标志就会调用doEndTag()方法doEndTag()方法也返回一个整数值用来决定程序后续流程

ATagSKIP_PAGE表示立刻停止执行网页网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上

BTag_EVAL_PAGE表示按照正常的流程继续执行JSP网页

用户自定义的标签属性

如果在标签中还包含了自定义的属性那么在标签处理类中应该将这个属性作为成员变量并且分别提供设置和读取属性的方法

创建标签处理类的步骤

创建包含JSP网页静态文本的文件(即是要替换自定义JSP标签的文本)

在Web应用启动时装载静态文本

创建标签处理类

如何创建包含JSP网页静态文本的文件

使用javautilProperties类来存放要替换网页中自定义JSP标签的静态文本 (lian素材)

Properties类代表了一系列属性的集合其实例既可以被保存到流中也可以从流中加载这些文本以key/value的形式存放在WEBINF目录下例如key=value在属性列表中这些key/value都是String类型的

Properties类的常用API

setProperty(String key String value)调用Hashtable类的put方法添加属性

getProperty(String key)获取属性列表中key对应的属性值

load(InputStream in)从输入流对象InputStream中读取属性列表(Properties list)

store(OutputStream outString coMMent)使用适当的格式将属性列表的属性对写入输出流对象中默认使用ISO编码格式以行的方式处理输入属性的 key/value之间以=:配对以回车换行分隔key/value配对

十一ServletContext类的常用API

getContext(String uripath)返回服务器中uripath所代表的ServletContext对象

getInitParameter(String name)返回ServletConfig对象中name参数的值

getMineType(String file)返回file参数代表的文件的MIME类型

getRequestDispatcher(String path)返回path代表的RequestDispacher对象

getResourceAsStream(String path)以输入流的形式返回path对应的资源在输入留中对象可以为任意形式的数据path参数必须以/开始且相对于Context Root

十二如何使用ServletContxt读取并保存属性文件(wwwliancom)

创建javautilProperties类对象

获取ServletContext对象

将属性文件以输入流的形式读入到某个输入流对象中

将输入流对象加载到Properties对象中

将Properties对象保存到ServletContext对象中

上一篇:如何建立JSP操作用以提高数据库访问效率

下一篇:JSP高访问量下的计数程序