JSP自定义标签
程序员文章站
2022-04-01 22:53:05
自定义标签是用户定义的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
另外还有自定义标签属性,不经常使用,这里就不在详细说了