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("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}
<%@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