jsp中自定义Taglib案例

一、使用TagSupport类案例解析

1.自定义Tag使用jdbc连接mysql数据库

1.1定义标签处理器类

package com.able.tag;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class DBconnectionTag extends TagSupport {
	private String driver;// 连接驱动
	private String url;// 连接db地址
	private String password;// 连接db密码
	private String sql;// 查询sql
	private String username;// 连接db用户名
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	@Override
	public int doEndTag() throws JspException {
		try {
			Class.forName(this.driver);
			conn = DriverManager.getConnection(this.url,this.username,this.password);
			stmt = conn.createStatement();
			rs = stmt.executeQuery(this.sql);
			if (rs != null) {
				while (rs.next()) {
					pageContext.getOut().print(rs.getString("cname")+"<br/>");
				}
			}
			return EVAL_PAGE;
		} catch (Exception e) {
			e.printStackTrace();
			return SKIP_PAGE;
		} finally {
				try {
					if (rs != null) {
						rs.close();
					}
					if (stmt != null) {
						stmt.close();
					}
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
	}

	public String getDriver() {
		return driver;
	}

	public void setDriver(String driver) {
		this.driver = driver;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSql() {
		return sql;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
}

1.2 在tag.tld文件中添加tag标签

 <tag>
	 	<name>DBconnectionTag</name><!-- 定义标签名 -->
	 	<tag-class>com.able.tag.DBconnectionTag</tag-class>
	 	<body-content>empty</body-content> <!-- 定义标签体为空 -->
	 	<attribute>
	 		<name>driver</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue><!-- 可以使用el表达式接收参数 -->
	 	</attribute>
	 	<attribute>
	 		<name>url</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 	<attribute>
	 		<name>username</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 	<attribute>
	 		<name>password</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 	<attribute>
	 		<name>sql</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 </tag>

1.3 定义jsp,页面引入标签库,并定义标签

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  <tm:DBconnectionTag url="jdbc:mysql://192.168.9.223:3306/test_2016" driver="com.mysql.jdbc.Driver" username="root" password="ablejava" sql="select * from course"/>
	   <br/>
    <br>
  </body>
</html>

2.forEach循环遍历输出集合

2.1 定义自定义标签处理器类

package com.able.tag;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class ForEachTag extends TagSupport {
	
	private String var;
	
	private Iterator<?> iterator;

	public void setItem(Object item) {
		if (item instanceof Map) {
			Map items = (Map) item;
			this.iterator = items.entrySet().iterator();
		} else {
			Collection<?> c = (Collection) item;
			this.iterator = c.iterator();
		}
	}
	
	@Override
	public int doStartTag() throws JspException {
		if (this.process())
			return EVAL_BODY_INCLUDE;
		else
			return EVAL_PAGE;
		
	}

	@Override
	public int doAfterBody() throws JspException {
		if (this.process()) {
			return EVAL_BODY_AGAIN;
		} else {
			return EVAL_PAGE;
		}
	}


	private boolean process() {

		if (null != iterator && iterator.hasNext()) {
			Object item = iterator.next();
			pageContext.setAttribute(var, item);
			return true;
		} else {
			return false;
		}
	}
	
	public String getVar() {
		return var;
	}
	
	public void setVar(String var) {
		this.var = var;
	}
}

2.3 在tld文件中定义标签

<tag>
		<name>foreach</name>
		<tag-class>com.able.tag.ForEachTag</tag-class>
		<body-content>JSP</body-content>

		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>item</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<!-- <type>java.lang.Object</type> -->
			 <type>java.util.Collection</type>
		</attribute>
	</tag>

2.4 在jsp页面定义循环标签

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  	<%
	    List<String> list = new ArrayList<String>();
	    list.add("aa");
	    list.add("bb");
	    list.add("cc");
	    Map map = new HashMap();
	    map.put("1","a");
	    map.put("2","b");
	    map.put("3","c");
	    map.put("4","b");
		%>
  	
  	<tm:foreach var="hi" item="<%=map %>">
  		<h1>${hi }</h1>
  	</tm:foreach>
	   <br/>
    <br>
  </body>
</html>

3.定义Iterator循环输出数组

3.1定义标签处理器类

package com.able.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class IteratorTagDemo extends TagSupport {
	private String var;
	private String[] items;

	private int i =1;
	@Override
	public int doStartTag() throws JspException {
		if (items != null && items.length>0) {
			pageContext.setAttribute("name", items[0]);
			return EVAL_BODY_INCLUDE;
		} else {
			return SKIP_BODY;
		}
	}
	
	
	@Override
	public int doAfterBody() throws JspException {
		if (i<items.length) {
			pageContext.setAttribute("name", items[i]);
			i++;
			return EVAL_BODY_AGAIN;
		} else {
			return SKIP_BODY;
		}
	}

	@Override
	public int doEndTag() throws JspException {
		// TODO Auto-generated method stub
		return super.doEndTag();
	}
	public String getVar() {
		return var;
	}

	public void setVar(String var) {
		this.var = var;
	}

	public String[] getItems() {
		return items;
	}

	public void setItems(String[] items) {
		this.items = items;
	}
}

3.2 在.tld文件中定义标签

 <tag>
	 	<name>IteratorTagDemo</name><!-- 定义标签名 -->
	 	<tag-class>com.able.tag.IteratorTagDemo</tag-class>
	 	<body-content>scriptless</body-content> <!-- 定义标签体为空 -->
	 	<attribute>
	 		<name>var</name>
	 		<required>true</required>
	 	</attribute>
	 	<attribute>
	 		<name>items</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 </tag>

3.3在jsp页面定义Tag

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  
  <%
  	String[] nbastar = {"jordan","kobar"};
  	pageContext.setAttribute("nbastar", nbastar);
  %>
  <tm:IteratorTagDemo items="${nbastar }" var="name">
  	${name }
  </tm:IteratorTagDemo>
	   <br/>
    <br>
  </body>
</html>

4.自定义Tag实现防盗链

4.1自定义标签处理器类

package com.able.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class SkipPageOrEvalPageTag extends TagSupport {

	@Override
	public int doEndTag() throws JspException {
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		String referer = request.getHeader("referer");
		String url = "http://"+request.getServerName();
		if (referer != null && referer.startsWith(url)) {
			return EVAL_PAGE;
		} else {
			try {
				pageContext.getOut().print("盗链");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return SKIP_PAGE;
	}
}

4.2在.tld文件中定义tag标记

<tag>
	 	<name>SkipPageOrEvalPageTag</name><!-- 定义标签名 -->
	 	<tag-class>com.able.tag.SkipPageOrEvalPageTag</tag-class>
	 	<body-content>empty</body-content> <!-- 定义标签体为空 -->
	 </tag>

4.3定义访问连接的SkipPageOrEvalPageAccess.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
	   <!-- 防盗链 -->
	   <a href="http://localhost/JSP_Tag_Demo/SkipPageOrEvalPage.jsp">防盗链</a>
	   <br/>
    <br>
  </body>
</html>

4.4定义访问成功后的SkipPageOrEvalPage.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
	   <!-- 防盗链 -->
	   <tm:SkipPageOrEvalPageTag/>
	   <h1>SkipPageOrEvalPage标签处理学习</h1>
	   <br/>
    <br>
  </body>
</html>

二、使用SimpleTagSupport实现自定义Tag

1.继承SimpleTagSupport类实现循环输出集合或数组

1.1定义标签处理器类

package com.able.simpleTag;

import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class foreachAll extends SimpleTagSupport {
	private Object items;
	private String var;
	private Collection collection;
	public void setItems(Object items) {
		this.items = items;
		if (items instanceof Collection) {//list set
			collection=(Collection) items;
		}
		if (items instanceof Map) {
			Map map=(Map) items;
			collection =map.entrySet();//set
		}
		if (items instanceof Object[]) {
			Object obj[]=(Object[]) items;
			collection=Arrays.asList(obj);
		}
		if (items.getClass().isArray()) {
			this.collection=new ArrayList();
			int length=Array.getLength(items);
			for (int i=0; i<length ; i++) {
				Object value=Array.get(items, i);
				this.collection.add(value);
			}
		}
	}
	public void setVar(String var) {
		this.var = var;
	}
	@Override
	public void doTag() throws JspException, IOException {
		Iterator it=this.collection.iterator();
		while (it.hasNext()) {
			Object value=it.next();
			this.getJspContext().setAttribute(var, value);
			this.getJspBody().invoke(null);
			
		}
	}
}

1.2定义.tld文件中添加标签

<tag>
	 	<name>simpleforeachAll</name>
	 	<tag-class>com.able.simpleTag.foreachAll</tag-class>
	 	<body-content>scriptless</body-content>
	 	<attribute>
	 		<name>items</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 	<attribute>
	 		<name>var</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 </tag>

1.3定义jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  	<%
	    List<String> list = new ArrayList<String>();
	    list.add("aa");
	    list.add("bb");
	    list.add("cc");
	    Map map = new HashMap();
	    map.put("1","a");
	    map.put("2","b");
	    map.put("3","c");
	    map.put("4","b");
	     int arr[]={1,2,3,4,5};
	  	request.setAttribute("arr", arr);
		%>
  	
	   <br/>
    <br>
    <tm:simpleforeachAll var="i" items="${arr }">${i }</tm:simpleforeachAll>
  </body>
</html>

2.使用SimpleTagSupport实现防盗链

2.1定义标签处理器类

package com.able.simpleTag;

import java.io.IOException;
import java.sql.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class RefererTag extends SimpleTagSupport {
	private String site;
	private String page;
	public void setSite(String site) {
		this.site = site;
	}
	public void setPage(String page) {
		this.page = page;
	}
	@Override
	public void doTag() throws JspException, IOException {
		PageContext pageContext =(PageContext) this.getJspContext();
		HttpServletRequest httpServletRequest=(HttpServletRequest) pageContext.getRequest();
		HttpServletResponse httpServletResponse=(HttpServletResponse) pageContext.getResponse();
		//1.referer
		String referer=httpServletRequest.getHeader("referer");
		if (referer==null || !referer.startsWith(site)) {
			if (page.startsWith(httpServletRequest.getContextPath())) {
				httpServletResponse.sendRedirect(page);
				return;
			}else if (page.startsWith("/")) {
				httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+page);
			}else{
				httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/"+page);
			}
			throw new SkipPageException();
		}
	}
	

}

2.2 定义.tld文件

<tag>
	 	<name>referer</name>
	 	<tag-class>com.able.simpleTag.RefererTag</tag-class>
	 	<body-content>empty</body-content>
	 	<attribute>
	 		<name>site</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 	<attribute>
	 		<name>page</name>
	 		<required>true</required>
	 		<rtexprvalue>true</rtexprvalue>
	 	</attribute>
	 </tag>

2.3定义refererAccess.jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
	   <!-- 防盗链 -->
	   <a href="http://localhost/JSP_Tag_Demo/Referer.jsp">防盗链</a>
	   <br/>
    <br>
  </body>
</html>

2.4定义访问页面referer.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
	   <!-- 防盗链 -->
	   <tm:referer site="" page=""/>
	   <br/>
    <br>
  </body>
</html>

三、使用BodyTagSupport实现自定义Tag

1.继承BodyTagSupport实现简单数据输出

1.1定义标签处理器类

package com.able.bodyTag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class BodyTagSupportTag extends BodyTagSupport {
	private BodyContent bodyContent;
	

	@Override
	public int doEndTag() throws JspException {
		String content = bodyContent.getString();
		System.out.println(content);
		
		String newStr = "www.cnblogs.com/izhongwei";
		JspWriter jspWriter= bodyContent.getEnclosingWriter();
		try {
			jspWriter.write(newStr);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}

	public BodyContent getBodyContent() {
		return bodyContent;
	}

	public void setBodyContent(BodyContent bodyContent) {
		this.bodyContent = bodyContent;
	}
	
	

}

1.2在.tld文件中定义标签

<tag>
	 	<name>bodyTag</name><!-- 定义标签名 -->
	 	<tag-class>com.able.bodyTag.BodyTagSupportTag</tag-class>
	 	<body-content>scriptless</body-content> <!-- 定义标签体为空 -->
	 </tag>

1.3定义jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- <%@taglib uri="http://www.able.com" prefix="tm" %> --%>
<%-- <%@ taglib prefix="tm" uri="/WEB-INF/tlds/online.tld" %> --%>
<%@taglib prefix="tm" uri="/WEB-INF/tag.tld" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
  <tm:bodyTag>
  	hello
  </tm:bodyTag>
	   <br/>
    <br>
  </body>
</html>

源码下载地址:https://github.com/ablejava/jsp-Tag

git克隆地址:https://github.com/ablejava/jsp-Tag.git  

 

转载于:https://www.cnblogs.com/ablejava/p/5712298.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值