【自定义标签的案例】防盗链、if标签、if-else标签、【foreach标签】、转义标签


1、防盗链

package com.xiaozhi.web.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.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class RefererTag extends SimpleTagSupport
{
	private String page;
	private String site;

	public void setPage(String page)
	{
		this.page = page;
	}

	public void setSite(String site)
	{
		this.site = site;
	}

	@Override
	public void doTag() throws JspException, IOException
	{
		PageContext pageContext = (PageContext) this.getJspContext();
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
		String referer = request.getHeader("referer");

		if (referer == null || !referer.startsWith(site))
		{
			response.sendRedirect(page);
			throw new SkipPageException();
		} 
	}

}

xiaozhi.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	
	<tlib-version>1.0</tlib-version>
	<short-name>xiaozhi</short-name>
	<uri>http://www.xiaozhi.com</uri>
	
	<tag>
		<name>referer</name>
		<tag-class>com.xiaozhi.web.tag.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>
</taglib>

show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.xiaozhi.com"   prefix="xiaozhi"%>

<xiaozhi:referer site="http://localhost" page="${pageContext.request.contextPath}/index.jsp"/>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  
  <body>
   	防盗的内容
  </body>
</html>
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  
  </head>
  	
  <body>
	  	首页欢迎你,<a href="${pageContext.request.contextPath}/show.jsp">浏览内容</a>
  </body>
</html>

2、if标签

IfTag.java

package com.xiaozhi.web.tag;

import java.io.IOException;

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

public class IfTag extends SimpleTagSupport
{
	private boolean test;

	public void setTest(boolean test)
	{
		this.test = test;
	}
	
	@Override
	public void doTag() throws JspException, IOException
	{
		if(test)
			this.getJspBody().invoke(null);
	}
	
}
xiaozhi.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	
	<tlib-version>1.0</tlib-version>
	<short-name>xiaozhi</short-name>
	<uri>http://www.xiaozhi.com</uri>
	
	<tag>
		<name>if</name>
		<tag-class>com.xiaozhi.web.tag.IfTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>test</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>
index.jsp

<%@page import="com.xiaozhi.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.xiaozhi.com"   prefix="xiaozhi"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  
  </head>
  <%
  	request.setAttribute("user",new User());
  %>
  <body>
	  <xiaozhi:if test="${user==null}">
		  请登录
	  </xiaozhi:if>
	  <xiaozhi:if test="${user!=null}">
		  aaaa
	  </xiaozhi:if>
  </body>
</html>

3、if-else标签

ChooseTag

package com.xiaozhi.web.tag;

import java.io.IOException;

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

public class ChooseTag extends SimpleTagSupport {

	private boolean isDo;
	
	public boolean isDo() {
		return isDo;
	}

	public void setDo(boolean isDo) {
		this.isDo = isDo;
	}

	@Override
	public void doTag() throws JspException, IOException {
		this.getJspBody().invoke(null);
	}
}

WhenTag

package com.xiaozhi.web.tag;

import java.io.IOException;

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

public class WhenTag extends SimpleTagSupport {

	private boolean test;
	
	public void setTest(boolean test) {
		this.test = test;
	}

	@Override
	public void doTag() throws JspException, IOException {
		ChooseTag parent=(ChooseTag) this.getParent();
		if(test && !parent.isDo())
		{
			this.getJspBody().invoke(null);
			parent.setDo(true);
		}		
	}
}

OtherWiseTag

package com.xiaozhi.web.tag;

import java.io.IOException;

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

public class OtherWiseTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		ChooseTag parent=(ChooseTag) this.getParent();
		if(!parent.isDo())
		{
			this.getJspBody().invoke(null);
			parent.setDo(true);
		}		
	}
}

xiaozhi.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	
	<tlib-version>1.0</tlib-version>
	<short-name>xiaozhi</short-name>
	<uri>http://www.xiaozhi.com</uri>
	
	<tag>
		<name>choose</name>
		<tag-class>com.xiaozhi.web.tag.ChooseTag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	
	<tag>
		<name>when</name>
		<tag-class>com.xiaozhi.web.tag.WhenTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>test</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	<tag>
		<name>otherwith</name>
		<tag-class>com.xiaozhi.web.tag.OtherWiseTag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
</taglib>

index.jsp

<%@page import="com.xiaozhi.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.xiaozhi.com"   prefix="xiaozhi"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  
  </head>
  <%
  	request.setAttribute("user",new User());
  %>
  <body>
  <xiaozhi:choose>
	  <xiaozhi:when test="${user==null}">
		  请登录
	  </xiaozhi:when>
	  <xiaozhi:otherwith>
		  aaaa
	  </xiaozhi:otherwith>
	  </xiaozhi:choose>
  </body>
</html>

4、foreach标签

// 将双列集合转化成单列集合

//List Map int[] Integer[] Object[]都转化成Object

//运用反射判断Object对象是不是数组

ForeachTag.java

package com.xiaozhi.web.tag;

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

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

public class ForeachTag2 extends SimpleTagSupport
{
	//List Map int[] Integer[] Object[]都转化成Object
	private Object items;
	private String var;
	private Collection collection;

	public void setItems(Object items)
	{
		this.items = items;
		// 将双列集合转化成单列集合
		if (items instanceof Collection)
		{
			collection = (Collection) items;
		}

		if (items instanceof Map)
		{
			Map map = (Map) items;
			collection = map.entrySet();
		}

		//运用反射判断Object对象是不是数组
		if(items.getClass().isArray()){
			collection=new ArrayList();
			for(int i=0;i<Array.getLength(items);i++){
				collection.add(Array.get(items, i));
			}
		}
//		if (items instanceof Object[])
//		{
//			collection = Arrays.asList((Object[]) items);
//		}
		
	}

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

	@Override
	public void doTag() throws JspException, IOException
	{
		for(Object value:collection){
			this.getJspContext().setAttribute(var, value);
			this.getJspBody().invoke(null);
		}
	}
}

index.jsp

<%@page import="com.xiaozhi.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.xiaozhi.com" prefix="xiaozhi"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

</head>
<body>
	<%
		List list = new ArrayList();
		list.add("nnn");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		request.setAttribute("list", list);
	%>
	<xiaozhi:foreach2 var="str" items="${list }">
 	${str}
 	</xiaozhi:foreach2>
	<hr>
	<%
		Map map = new HashMap();
		map.put("aaa", "1111");
		map.put("bbb", "2222");
		map.put("ccc", "3333");
		map.put("ddd", "4444");
		request.setAttribute("map", map);
	%>
	<xiaozhi:foreach2 var="entry" items="${map }">
 	${entry.key}=${entry.value}
 	</xiaozhi:foreach2>

	<hr>
	<%
		Integer[] integer ={ 1, 2, 3, 4 };
		request.setAttribute("integer", integer);
	%>
	<xiaozhi:foreach2 var="i" items="${integer}">
	${i }
 	</xiaozhi:foreach2>
	<hr>
	<%
		int[] is ={ 1, 2, 3, 4 };
		request.setAttribute("is", is);
	%>
	<xiaozhi:foreach2 var="i" items="${is}">
	${i }
 	</xiaozhi:foreach2>
 	<hr>
 	<%
		boolean[] bs ={ true,false,true };
		request.setAttribute("bs", bs);
	%>
	<xiaozhi:foreach2 var="b" items="${bs}">
	${b }
 	</xiaozhi:foreach2>

</body>
</html>

xiaozhi.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	
	<tlib-version>1.0</tlib-version>
	<short-name>xiaozhi</short-name>
	<uri>http://www.xiaozhi.com</uri>
	
	<tag>
		<name>foreach2</name>
		<tag-class>com.xiaozhi.web.tag.ForeachTag2</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

5、HtmlFilterTag

package com.xiaozhi.web.tag;


import java.io.IOException;
import java.io.StringWriter;


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


public class HtmlFilterTag extends SimpleTagSupport
{
@Override
public void doTag() throws JspException, IOException
{
JspFragment jspFragment = this.getJspBody();
StringWriter writer = new StringWriter();
jspFragment.invoke(writer);


String str = writer.getBuffer().toString();
str=filter(str);
this.getJspContext().getOut().write(str);
}


public static String filter(String message)
{


if (message == null)return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuilder result = new StringBuilder(content.length + 50);
for (int i = 0; i < content.length; i++)
{
switch (content[i])
{
case '<':
result.append("&lt;");
break;
case '>':
result.append("&gt;");
break;
case '&':
result.append("&amp;");
break;
case '"':
result.append("&quot;");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}


index.jsp

<%@page import="com.xiaozhi.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.xiaozhi.com" prefix="xiaozhi"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

</head>
<body>
	<xiaozhi:htmlfilter>
		<a href="http://www.xiaozhi.com">点点</a>
	</xiaozhi:htmlfilter>
</body>
</html>
xiaozhi.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	
	<tlib-version>1.0</tlib-version>
	<short-name>xiaozhi</short-name>
	<uri>http://www.xiaozhi.com</uri>
	
	<tag>
		<name>htmlfilter</name>
		<tag-class>com.xiaozhi.web.tag.HtmlFilterTag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
</taglib>

6、打成jar

首先新建一个java工程

拷贝java文件,包名与原来一致

在src下新建META-INF目录,拷贝tld文件

导出jar,不选.classpath和.project

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值