欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP自定义标签

程序员文章站 2022-06-26 17:41:43
自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We...

自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。

不含标签体的自定义标签

首先你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
这里要注意的是这里的Selvlet类不能是裸体类,也就是必须要在包里面,不然后面配置文件不生效

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;
public class MyServlet extends SimpleTagSupport {

    @Override
    public void doTag() throws JspException, IOException {
        JspWriter out = this.getJspContext().getOut();//获得当前页面的输出流
        out.println("Hello World!");//输出Hello World!
    }

}

接下来在WEB-INF目录下写一个标签库,以tld后缀名结尾,这里写mytag.tld


    
        2.0
        
        ex
        
            
            Hello
            
            com.mytag.MyServlet
            
            empty
        
    

接下来就是测试用的jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--这里prefix是标签前缀名   uri是标签库地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<%--使用自定义标签--%>

这样页面就会输出Hello World!了


访问自定义标签体

访问标签体,这样的话就需要修改以上三个文件了
Selvlet中要有对标签体获取的代码

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;

public class MyServlet extends SimpleTagSupport {

    @Override
    public void doTag() throws JspException, IOException {
        StringWriter sw = new StringWriter();//字符串输出流,包装一个字符串
        getJspBody().invoke(sw);//把标签体内容放入sw流里面
        getJspContext().getOut().println(sw);//输出到页面上
    }
}

接着mytag.tld中要设置标签体不为空

<code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%2D%2D%3E-->
    <taglib xmlns="https://java.sun.com/xml/ns/j2ee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
        <tlib-version>2.0</tlib-version>
        <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E5%89%8D%E7%BC%80%E5%90%8D%2C%E5%8F%AF%E4%BB%A5%E5%9C%A8jsp%E5%A3%B0%E6%98%8E%E4%B8%AD%E6%9B%B4%E6%94%B9%2D%2D%3E-->
        <short-name>ex</short-name>
        <tag>
            <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E6%A0%87%E7%AD%BE%E5%90%8D%E7%A7%B0%2D%2D%3E-->
            <name>Hello</name>
            <!--{cke_protected}{C}%3C!%2D%2D%E6%8C%87%E5%AE%9A%E9%82%A3%E4%B8%AAServlet%E6%89%A7%E8%A1%8C%E8%BF%99%E4%B8%AA%E6%A0%87%E7%AD%BE%E8%A7%A3%E9%87%8A%2D%2D%3E-->
            <tag-class>com.mytag.MyServlet</tag-class>
            <!--{cke_protected}{C}%3C!%2D%2D%E8%AE%BE%E7%BD%AE%E6%A0%87%E7%AD%BE%E4%BD%93%E4%B8%BA%E7%A9%BA%2D%2D%3E-->
            <body-content>scriptless</body-content>
        </tag>
    </taglib></code>

最后是测试用的jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--这里prefix是标签前缀名   uri是标签库地址--%>
<%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
<%--使用自定义标签--%> hahahhahahahhah

页面上就会输出hahahhahahahhah


另外还有自定义标签属性,不经常使用,这里就不在详细说了