在上一讲中,描述了如何使用简单标签开发自定义标签。既然开发了自定义的标签,如果要给别人去使用,我们就要像JSTL那样,将自己开发的标签打成jar包,如果别的工程要使用的话,直接将jar包导入到工程中就可以了。
首先,我们可以建一个java工程,在根目录下建立一个文件夹:META-INF,这个文件夹是用来存放我们写的tld文件的,src下建立自己的包,然后将自己编写的类文件放在src的包中。工程的结构如下:
下面给一个小Demo
首先,我们自己定义模拟JSTL的<c:if>标签
JyIfTag.java
package com.jjyy.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * 自定义if标签 * @author JiangYu * */ public class JyIfTag extends SimpleTagSupport { private boolean test; @Override public void doTag() throws JspException, IOException { if(test){ getJspBody().invoke(null); }else{ } } public void setTest(boolean test) { this.test = test; } }然后,在写一个防盗链的标签
JyRefererTag.java
package com.jjyy.tag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * 自定义防盗链标签 * @author JiangYu * */ public class JyRefererTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { PageContext pc = (PageContext) getJspContext(); HttpServletRequest request = (HttpServletRequest) pc.getRequest(); HttpServletResponse response = (HttpServletResponse) pc.getRequest(); String referer = request.getHeader("Referer"); if(referer==null||referer==""||referer.indexOf("http://localhost")<0){ response.sendRedirect(request.getContextPath()+"/index.jsp"); return ; } } }最后我们来编写tld文件:
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" <span style="white-space:pre"> </span>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<span style="white-space:pre"> </span>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>JY</short-name> <uri>http://www.jjyy.com</uri> <tag> <name>Referer</name> <tag-class>com.jjyy.tag.JyRefererTag</tag-class> <body-content>empty</body-content> </tag> <tag> <name>If</name> <tag-class>com.jjyy.tag.JyIfTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> </attribute> </tag> </taglib>
打好了jar包后,我们就可以试一下自己的标签了,新建一个web工程,将刚才打好的jar包导入到工程中:
最后新建一个jsp页面,使用我们自定义的标签:注意记得在jsp页面导入标签
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.jjyy.com" prefix="JY" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>自定义标签打包后使用</title> </head> <body> <JY:If test="${1<2}"> 确实是这样!!! </JY:If> <JY:If test="${1>=2}"> 你确定吗? </JY:If> </body> </html>启动tomcat,访问写好的页面,输出结果为: