1.tld配置文件创建
<?xml version="1.0" encoding="UTF-8" ?> <!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>MyTag</short-name> <!-- 标签的简写 --> <uri>http://www.com.cn/tag/my</uri><!-- 指定这个标签的uri信息 --> <description>My Framework JSP Tag Library.</description><!-- 本标签的描述 --> <tag> <name>message</name><!-- 标签名字 --> <tag-class>com.ntong.tag.TestTag</tag-class><!-- 指定标签的类 --> <body-content>scriptless</body-content><!-- 标签主体的内容 empty表示这个标签可以直接结尾,不需要填写内容 jsp表示标签体由其他jsp元素组成 scriptless:表示可以有标签体,可以把request域中的内容保留--> </tag> </taglib>
2.标签类的创建
package com.ntong.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; public class TestTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { this.getJspBody().invoke(null); } }
3.使用自定义标签
<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="tag" uri="http://www.com.cn/tag/my"%>
<html>
<head>
<title></title>
</head>
<body>
<% request.setAttribute("msg","name");%>
<tag:message>
${msg}
</tag:message>
</body>
</html>
4.补充(自定义全局函数调用标签)
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>JSTL 1.1 functions library</description> <display-name>JSTL functions sys</display-name> <tlib-version>1.1</tlib-version> <short-name>fns</short-name> <uri>http://java.sun.com/jsp/jstl/functionss</uri> <function> <description>获取管理路径</description> <name>getAdminPath</name> <function-class>com.ntong.tag.Test</function-class> <function-signature>java.lang.String test(java.lang.String)</function-signature><!-- 被掉用的方法的返回类型,方法名,参数类型,并且被调用的函数要是静态的 --> <example>${fns:getAdminPath()}</example> <!-- el表达式调用方式-->
</function> </taglib>
被调用的函数
package com.ntong.tag; public class Test { public static String test(String str){ return str; } }
使用此标签
<%-- Created by IntelliJ IDEA. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="tag" uri="http://java.sun.com/jsp/jstl/functionss"%> <html> <head> <title></title> </head> <body> ${tag:getAdminPath("huqi")} </body> </html>