在上一讲中,描述了如何使用简单标签开发自定义标签。既然开发了自定义的标签,如果要给别人去使用,我们就要像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包。
打好了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,访问写好的页面,输出结果为: