【自定义标签的案例】防盗链、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
相关文章推荐
- 自定义标签案例:if else标签的设计
- 标签案例if else 标签:
- JSP标签案例----开发If-else和单独的if标签
- JSP标签案例----开发If-else和单独的if标签
- 【自定义标签开发】08-标签案例-开发if..else标签
- 流程控制陷阱(Switch语句,标签,if语句,for循环,foreach循环的循环计数器)
- 如何在JSP页面中使用JSTL标签实现if和if-else判断,判断条件使用<%=value%>
- <c:set><c:if><c:foreach>标签的应用
- jsp中jstl标签的类似 if - else 语句 的语法
- c标签 if else c标签 总结
- c标签 if else c标签 总结
- javaweb之自定义标签库——if else标签
- 每天一个python 小案例——if else
- 【自定义标签开发】06-标签案例-开发防盗链标签
- 使用简单标签模拟标签(c:if c:when c:otherwise c:foreach)
- 【自定义标签开发】09-标签案例-开发foreach标签
- 自定义标签的使用-防盗链标签的实现
- JSTL标签 if else 判断
- JAVA学习(三)__c标签 if else c标签 总结
- Struts2中的ognl标签介绍(property标签、iterator标签、if/elseif/else标签、url标签、url标签、radio单选框、select下拉选择框)