您的位置:首页 > 其它

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

2014-05-06 18:28 603 查看





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(n
c090
ull);
}
}
}

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("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: