先貼出項目結構,然后分步進行講解

方法一
1:創建標簽類
package com.www.servlet; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; /** * Created by coisini on 2018/10/11. * 1:繼承標簽處理類SimpleTagSupport * 2:重寫其doTag()方法 */
public class HelloTag extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
2:寫標簽配置文件 -myTag.tld
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>Hello</name>
<tag-class>com.www.servlet.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
3:引用標簽--jsp頁面通過 taglib指令指定標簽配置文件路徑,引入自定義標簽即可
<!-- 路徑問題 1):絕對路徑 這里要注意,uri指定標簽配置文件路徑時路勁一定要寫對 有的小伙伴直接從教程copy的代碼,上邊uri="WEB-INF/myTag.tld",報紅,找不到文件,為什么會這樣呢 在這里他是想寫絕對路徑,那么寫絕對路徑,沒有根目錄,怎么找得到從WEB-INF,所以要先指定根目錄,/ 就代表了當前web項目,所以寫成uri="/WEB-INF/myTag.tld" 你也可以在WEB-INFO下再建一個文件夾,將標簽配置文件放進去,都可以的,只要路徑正確即可 2):用相對路徑 根據我當前的項目結構,標簽配置文件路徑我也可以這樣寫 uri="../WEB-INF/myTag.tld" --> <%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body>
4:展示結果--over

5:如何引入多個自定義標簽
引入多個自定義標簽
一句話,多寫一個標簽類,配置文件多寫一個<tag>標簽,jsp頁面多引入一個自定義標簽,
代碼很簡單,但是還是貼出來吧,萬一有人看不懂,還得自己倒騰半天
==myTag.tld== <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Hello</name> <tag-class>com.www.tag.HelloTag</tag-class> <body-content>empty</body-content> </tag> <tag> <name>World</name> <tag-class>com.www.tag.WorldTag</tag-class> <body-content>empty</body-content> </tag> </taglib> ==index.jsp== <%@ taglib prefix="ex" uri="../WEB-INF/myTag.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> <ex:World/> </body> </html>
方法二
1:創建標簽類
2:寫標簽配置文件
3:在web.xml中配置標簽配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <jsp-config> <taglib> <!-- 這里相當於映射 taglib-location, 指定標簽配置文件的路徑 taglib-uri, 不就是別名嘛,你可以叫aa,bb或者 http://www/coisini,隨便取,都是可以映射到的 但是,,轉折來的, URI也是有規范的 URI規范: 第一部分是協議 第二部分是存有該資源的主機IP地址(有時也包括端口號) 第三部分是主機資源的具體地址,如目錄和文件名等 第一部分和第二部分之間用“://”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。 eg:http://coisini/myTag 我這里呢沒寫規范,只是為了證明,別名可以自己取,只要能映射到就行,但是 大家還是要命名規范點 --> <taglib-uri>coisini</taglib-uri> <taglib-location>/WEB-INF/myTag.tld</taglib-location> </taglib> </jsp-config> </web-app>
4:jsp頁面引入標簽
<!--如果是使用,web.xml配置的方式引用自定義標簽,這里,uri就直接寫<taglib-uri>coisini</taglib-uri>的值就可以--> <%@ taglib prefix="ex" uri="coisini"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> <ex:World/> </body> </html>
總結-兩種方法差別在哪
就是自定義標簽配置文件的引用區別唄
方法一:直接在jsp頁面引入自定義標簽配置文件(一定要注意路徑問題)
方法二:自定義標簽配置文件的路徑配置在web.xml中,反射的原理,在jsp頁面引用自定義標簽時,uri取web.xml中<tablib-uri>的值即可(uri要規范取名)
