zoukankan      html  css  js  c++  java
  • 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  

  • 相关阅读:
    10查询结果排序
    11汇总和分组数据
    09查询基础
    07修改数据
    08删除数据
    06插入数据
    PHP 判断数组是否为空的5大方法
    Mysql模糊查询like效率,以及更高效的写法
    经典面试题golang实现方式(一)
    php调用c语言编写的so动态库
  • 原文地址:https://www.cnblogs.com/ablejava/p/5712298.html
Copyright © 2011-2022 走看看