自定义标签实例
来源:互联网 发布:云图网络电视 编辑:程序博客网 时间:2024/06/08 02:53
(1) 撰写标签处理类
首先需要明确自定义标签所要实现的功能,然后进行标签处理类的编写。一般如果要实现一个标签处理类需要具备以下特性。
- 继承TagSupport类或BodyTagSupport类或SimpleTagSupport类。
- 对自定义标签中声明的属性提供相对应的变量,并提供相应的set方法。
- doStart()、doAfterBody()、doEndTag()或doTag()方法内编写自定义功能的标签处理类代码,实现自定义标签想要实现的功能。
在这里将以传统标签为例实现输出“Hello World”的效果。具体编写的代码如下:
package com.tjgd.tag;import java.io.IOException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;public class HelloWorld extends TagSupport{ public int doStartTag(){ JspWriter out=super.pageContext.getOut(); //获取页面输出流对象 try {out.println("<h1>Hello World!!</h1>"); //进行页面的输出} catch (IOException e) {e.printStackTrace();}return TagSupport.SKIP_BODY; //表示不需要执行标签体 }}
HelloWorld类继承了TagSupport这个标签支持类,之后覆写了doStartTag()方法。此方法主要的作用是遇到标签起始标志时调用,之后通过TagSupport类中的pageContext属性取得当前页面的输出对象并进行了输出。由于此时开发的标签没有任何的标签主体,所以在程序的最后返回的是一个SKIP_BOYD的常量,表示不执行标签主体的内容。
(2)创建标签库描述文件
创建TLD文件,源码如下:<?xml version="1.0" encoding="UTF-8"?><taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd"> <tlib-version>1.0</tlib-version><!—表示标签库的版本 --> <jsp-version>2.0</jsp-version><!—表示标签库所依赖的JSP版本 --> <short-name>mytaglib</short-name><!—表示标签库在TLD文件中的描述名称--><tag> <name>helloworld</name> <!-- 此标签的名称 --> <tag-class> com.tjgd.tag.HelloWorld <!-- 此标签处理类的完整路径 --> </tag-class> <body-content>empty</body-content> <!-- 指定标签的格式--> </tag></taglib>可以在web.xml中声明(可选)
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!—web.xml文件的头信息 <jsp-config> <taglib><taglib-uri>tjgd</taglib-uri> <!-指定TLD文件的映射名称-><taglib-location>/WEB-INF/helloworldtag.tld</taglib-location> <!--指定TLD文件的路径 --></taglib></jsp-config></web-app>
如上的web.xml文件中的配置是可选的,例如在JSP2.0后就可以不用声明TLD文件的位置,因为Web容器在开始建立<uri>和TLD文件映射时会首先在web.xml中查找,如果web.xml中做了这样的映射配置,则可以使用这些配置来建立映射;如果没有,会在WEB-INF目录以及它的tlds子目录下查找TLD文件,然后自动建立两者之间的映射关系。
(4)JSP页面中使用自定义标签
JSP文件具体代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!—JSP页面的头文件信息<%@ taglib prefix="mytag" uri="tjgd" %> <!-- 引入自定义标签 --><html> <body> <mytag:helloworld/> <!-- 使用自定义标签进行输出 --> </body></html>
在HelloWorld.jsp页面中,首先通过<%@taglib%>定义了一个标签的前缀名称“mytag”,之后通过这个前缀名称调用了helloworldtag.tld文件中定义的标签的名称“helloworld”。如果没有在web.xml中做相应的配置,则需要在JSP页面中做如下具体的引用:
<%@ taglib prefix="mytag" uri="/WEB-INF/helloworldtag" %>
开发完毕后的Web项目结构如所示。
如下总结了JSP自定义标签的一般处理过程。
(1)Web容器根据JSP页面中的标签库标签<mytag:helloworld/>中的mytag找到与之对应的引入标签库中的prefix ,如本例的<%@ taglib prefix="mytag" uri="tjgd" %> ,并获取uri属性的值为“tjgd”。
(2)Web容器根据uri属性的值找出web.xml配置文件中对应的taglib元素,而后从中获取对应的<taglib-location>元素的值。如本实例定位到了WEB-INF目录下的helloworldtag.tld文件。如果uri属性值为TLD文件路径,那么Web容器会自动搜索TLD文件,并与uri建立起对应关系。
(3)在tld文件中找到与标签库标签<my:helloworld/>中“helloworld”对应的<tag>元素,并利用<tag>元素找到对应的<tag-class>元素。
(4)Web容器根据<tag-class>元素的值创建相应的标签处理类的实例,然后调用类中的主要方法完成相应的处理,并将最终的值显示到JSP页面上。
- 自定义标签的实例
- 自定义标签实例
- 自定义标签实例
- jsp自定义标签实例
- Jsp自定义标签实例
- 自定义标签实例
- 自定义标签(实例)
- struts2 自定义标签 实例
- struts2 自定义标签 实例
- Struts2自定义标签实例
- 自定义标签实例
- struts2 自定义标签 实例
- struts2 自定义标签实例
- jsp自定义标签实例
- JSP自定义标签入门实例
- jsp:自定义标签实例(TLD)
- jsp自定义标签(JSTL)实例
- 自定义标签的一个实例
- android中获取当前程序路径等方法
- Win32环境PortAudio库编译简介:音频播放
- OpenCV Machine Learning 之 正态贝叶斯分类器 (Normal Bayes Classifier)
- hdu4217 Data Structure?
- uva 10404 Problem B: Bachet's Game 迭代
- 自定义标签实例
- PostgreSQL hstore 列性能提升一例
- Actionbar 中解决溢出菜单不显示的问题
- 看到很多人都写的是javascript:void(0);,新浪微博也是,为什么不能直接写成javascript:;?
- 输入阻抗和输出阻抗小结
- 快速求幂 POW优化
- 百度暑假实习面试
- 2014阿里巴巴WEB前端实习生在线笔试题
- 基本命令实践