jsp自定义标签入门教程
JSP自定义标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法。从概念上讲,标签就是很简单而且可重用的代码结构。自定义标签的实现分三步,第一步就是编写tld文件;第二步,编写java文件;第三步,在jsp页面使用自定义标签。
包引用
import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*;
接口类结构

首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。
SimpleTag 接口定义了标签处理类的生命周期方法。doTag()
SimpleTagSupport 类全部实现了SimpleTag接口的方法,因此后面我们只需要继承并重写该类即可。
开发自定义标签步骤
1. 编写一个普通的java类,继承SimpleTagSupport类
public class ShowIp extends SimpleTagSupport { @Override public void doTag() throws JspException,IOException { PageContext pageContext = (PageContext) this.getJspContext(); ServletRequest request = pageContext.getRequest(); String ip = request.getRemoteHost(); JspWriter out = pageContext.getOut(); out.write("使用自定义标签展示客户ip地址" + ip); } }
2. 建立mytaglib.tld文件
在web项目的WEB-INF目录下建立mytaglib.tld文件,这个tld叫标签库的声明文件。(参考核心标签库的tld文件)
<?xml version="1.0" encoding="UTF-8" ?> <taglib 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-jsptaglibrary_2_1.xsd" version="2.1"> <description>A tag library exercising SimpleTag handlers.</description> <!-- 标签库的版本 --> <tlib-version>1.0</tlib-version> <!-- 标签库前缀 --> <short-name>rlovep</short-name> <!-- tld文件的唯一标记 --> <uri>http://rlovep.com</uri> <!-- 定义标签,标签要放在方法前面 --> <tag> <!-- 标签名 --> <name>showIp</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.ShowIp</tag-class> <body-content>empty</body-content> </tag> <tag> </taglib>
3. jsp页面导入自定义标签库
在jsp页面的头部导入自定义标签库:url为你在tld中写的url,前缀也是你在tld文件中定义的
<%@ taglib uri="http://rlovep.com" prefix="rlovep" %>
4. 在jsp中使用自定义标签
<html> <head> </head> <body> <rlovep:showIp></rlovep:showIp> </body> </html>
执行过程步骤如下:
1. 检查jsp文件的taglib指令,是否存在一个url为http://rlovep.com的tld文件。如果没有,则报错。
2. 执行jsp文件的转化:把jsp文件翻译成java源文件->编译class->构造类对象->调用_jspService()方法
3. 读到到mytaglib.tld文件中查询是否存在为showIp的标签
4. 找到对应的标签,则读到内容,得到com.rlovep.tags.ShowIp
5. 构造ShowIp对象,然后调用ShowIp里面的方法:dotag方法
自定义标签原理
1. 当服务器打开时,就会加载WEB-INF下的资源文件,包括web.xml 和 tld文件,把它们加载到内存
2. 我们在浏览器输入http://localhost:8080/xxxx.jsp 来访问jsp页面
3. 服务器读取xxxx.jsp里的内容,当读到 <%@taglib uri="http://rlovep.com" prefix="rlovep" %> 这一句的时候,就会在内存中找是否存在uri为http://rlovep.com 的tld文件,找不到就会报错
4. 继续读取jsp页面,读到<rlovep:mytag>这个标签的时候,就会通过uri去找到tld文件,在tld文件中找到mytab是否被定义,是的话就得到它的tag-class的内容,然后去找到它对应的标签处理程序
5. 实例化标签处理程序,利用生成的对象调用它里面的方法。这里服务器对标签处理程序里的方法也有一定的调用顺序
A)void setPageContext(PageContext pc) --传入pageContext对象
B)void setParent(Tag t) --如果有父标签,传入父标签对象,如果没有,则传入null
C)int doStartTag() --开始执行标签时调用。
D)int doEndTag() --结束标签时调用
E)void release() --释放资源
如果你没有重写上面的方法,系统将会调用它的父类里的方法。
总结
1. 当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签。开发一个简单标签,我们只需要继承TagSupport或SimpleTagSupport即可
2. 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。