JSP自定义标签---三分钟,两种方法
先贴出项目结构,然后分步进行讲解
方法一
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要规范取名)