自定义标签是用户定义的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="http://www.51sjk.com/Upload/Articles/1/0/251/251197_20210626000546170.jpg xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.51sjk.com/Upload/Articles/1/0/251/251197_20210626000547107.jpg http://www.51sjk.com/Upload/Articles/1/0/251/251197_20210626000547107.jpg/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
另外还有自定义标签属性,不经常使用,这里就不在详细说了
日出江姗红似火丶