JavaWeb之 JSP:自定义标签

来源:互联网 发布:sai mac没压感 编辑:程序博客网 时间:2024/05/29 16:56

https://www.cnblogs.com/vmax-tam/p/4145334.html

自定义标签的开发步骤

步骤一

编写一个普通的java类,继承TagSupport类~

package com.vmaxtam.dotest;import javax.servlet.jsp.tagext.TagSupport;public class MyTagTest extends TagSupport {}

步骤二

重写父类的setPageContext方法,用于得到当前jsp页面的pageContext对象。

public class MyTagTest extends TagSupport {        private PageContext pageContext;    @Override    public void setPageContext(PageContext pageContext) {        this.pageContext=pageContext;    }}

步骤三

重写父类的doStartTag方法,里面写上你定义的标签的java操作,这里我定义的标签用作向浏览器输出一大段信息:

@Override    public int doStartTag() throws JspException {    try {      pageContext.getResponse().getWriter().write("这是我写的一大段信息:ABCDEFGHIJKLMNOPQRSTUVWXYZ");        } catch (IOException e) {            e.printStackTrace();            throw new RuntimeException(e);        }        return super.doStartTag();    }

这样就完成一个标签处理程序了~别着急,写完程序我们还需要注册它。

步骤四

在你的web应用目录下,找到WEB-INF文件夹,在里面新建一个tld类型的文件

然后再里面注册你的标签吧:

<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE taglib  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib>  <tlib-version>1.0</tlib-version><!-- 代表标签库的版本号 -->  <jsp-version>1.2</jsp-version><!-- 代表jsp的版本 -->  <short-name>mtt</short-name><!-- 你的标签库的简称 -->  <uri>http://vmaxtam.com/mytag</uri><!-- 你标签库的引用uri -->  <tag>      <name>mytah</name><!-- 你定义的标签的名称 -->       <tag-class>com.vmaxtam.dotest.MyTagTest</tag-class><!-- 对应的标签处理程序:包名+类名 -->      <body-content>JSP</body-content><!-- 标签体内容的格式 -->    <!-- 标签需要的属性 -->    <attribute>         <name>modelClass</name>         <required>true</required>         <rtexprvalue>true</rtexprvalue>    </attribute>    <attribute>        <name>parentId</name>         <required>true</required>         <rtexprvalue>true</rtexprvalue>    </attribute>  </tag> </taglib>

如果你忘记了怎么写,可以参考jstl里的tld文件~

步骤五

你要在使用你定义的标签的jsp页面导入你的标签库!就像导入类包一样

只需在jsp页面写上下面内容:

<%@taglib uri="http://vmaxtam.com/mytag" prefix="mmt" %>

步骤6

以上5步已经把准备工作都做好了~下面我们来使用标签吧!

<html>  <head>       <title>My JSP 'testit.jsp' starting page</title>  </head>  <body>      <mmt:mytag></mmt:mytag>  </body></html>

这样,我们就完成了一次自定义标签了,虽然我们知道步骤,但是不知道为什么这样就行,所以,下面来说一下它的原理:

自定义标签的原理

1)当服务器打开时,就会加载WEB-INF下的资源文件,包括web.xml 和 tld文件,把它们加载到内存

2)我们在浏览器输入http://localhost:8080/TestArea/testit.jsp来访问jsp页面

3)服务器读取testit.jsp里的内容,当读到

<%@taglib uri="http://vmaxtam.com/mytag" prefix="mmt" %> 

这一句的时候,就会在内存中找是否存在uri为http://vmaxtam.com/mytag的tld文件,找不到就会报错

4)继续读取jsp页面,读到<mmt: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() –释放资源

如果你没有重写上面的方法,系统将会调用它的父类里的方法~

原创粉丝点击