zoukankan      html  css  js  c++  java
  • 标签开案例

    •开发防盗链标签:  (控制整个jsp页面是否执行)
     
    package cn.gbx.web.example;
    
    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;
    import javax.xml.ws.RespectBinding;
    
    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 {
    		
    		//1. 得到用户请求的referer
    		PageContext pc = (PageContext) this.getJspContext();
    		HttpServletRequest request = (HttpServletRequest)pc.getRequest();
    		String referer = request.getHeader("referer");
    		HttpServletResponse response = (HttpServletResponse)pc.getResponse();
    		
    		//2. 检查盗链情况
    		// 是盗链者
    		if (referer == null || !referer.startsWith(site)) {
    			if (page.startsWith(request.getContextPath())) {
    				response.sendRedirect(page);
    			} else if (page.startsWith("/")) {
    				response.sendRedirect(request.getContextPath() + page);
    			} else {
    				response.sendRedirect(request.getContextPath() + "/" + page);
    			}
    			throw new SkipPageException();  // 后的页面不执行
    		} else {  // 非盗链者
    			
    		}
    		//System.out.println(request.getContextPath());
    	}
    }
    
    
     <tag>
            <name>referer</name>
            <tag-class>cn.gbx.web.example.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>
    

      

    •开发<c:if>标签 (控制标签体内容是都执行)
    package cn.gbx.web.example;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    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 {
    		JspFragment jf = this.getJspBody();
    		if (test) {
    			jf.invoke(null);
    		} else {
    			
    		}
    	}
    
    }
    
     <tag>
            <name>if</name>
            <tag-class>cn.gbx.web.example.IfTag</tag-class>
            <body-content>scriptless</body-content>
            <attribute>
            	<name>test</name>
            	<required>true</required>
            	<rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    

      

    •开发<c:if><c:else>标签  (涉及父标签的使用)
    package cn.gbx.web.example;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class ChooseTag extends SimpleTagSupport {
    	//子标签共享的变量
    	private boolean isOver;
    
    	public boolean isOver() {
    		return isOver;
    	}
    
    	public void setOver(boolean isOver) {
    		this.isOver = isOver;
    	}
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		this.getJspBody().invoke(null);
    	}
    	
    }
    

      

    package cn.gbx.web.example;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    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 ch = (ChooseTag)this.getParent();
    		if (test && !ch.isOver()) { //子标签是真, 共享的父标签的变量还未使用
    			JspFragment jf = this.getJspBody();
    			jf.invoke(null);
    			ch.setOver(true);
    		} else {
    			
    		}
    	} 
    	
    }
    

      

    package cn.gbx.web.example;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class OtherWiseTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		ChooseTag ch = (ChooseTag) this.getParent();
    		if (!ch.isOver()) {
    			JspFragment jf = this.getJspBody();
    			jf.invoke(null);
    			ch.setOver(true);
    		} else {
    			
    		}
    	}
    
    }	
    

      

     <tag>
            <name>choose</name>
            <tag-class>cn.gbx.web.example.ChooseTag</tag-class>
            <body-content>scriptless</body-content>
        </tag>
        <tag>
            <name>when</name>
            <tag-class>cn.gbx.web.example.WhenTag</tag-class>
            <body-content>scriptless</body-content>  
            <attribute>
            	<name>test</name>
            	<required>true</required>
            	<rtexprvalue>true</rtexprvalue>
            </attribute> 	
        </tag>
        <tag>
        	<name>otherwise</name>
        	<tag-class>cn.gbx.web.example.OtherWiseTag</tag-class>
        	<body-content>scriptless</body-content>  
        </tag>
        
    

      

    •开发迭代标签 (控制标签内的内容重复执行)
    package cn.gbx.web.example;
    
    import java.io.IOException;
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    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 ForeachTag extends SimpleTagSupport {
    	private Object items;
    	private String var;
    	private Collection collection;
    	
    	
    	public void setVar(String var) {
    		this.var = var;
    	}
    	public void setItems(Object items) {
    		this.items = items;
    		//集合
    		if (items instanceof Collection) {
    			collection = (Collection)items;
    		} 
    		//Map
    		if (items instanceof Map) {
    			collection = ((Map)items).entrySet();
    		}
    		//数组的判断
    		if (items.getClass().isArray()) {
    			this.collection = new ArrayList();
    			int length = Array.getLength(items);
    			for (int i = 0; i < length; ++i) {
    				this.collection.add(Array.get(items, i));
    			}
    		}
    	}
    
    	//遍历
    	@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);
    		}
    	}
    }
    

      

    <tag>
        	<name>foreach</name>
        	<tag-class>cn.gbx.web.example.ForeachTag</tag-class>
        	<body-content>scriptless</body-content>  
        	
        	<attribute>
        		<name>var</name>
        		<required>true</required>
        		<rtexprvalue>fase</rtexprvalue>
        	</attribute>
        	
        	<attribute>
        		<name>items</name>
        		<required>true</required>
        		<rtexprvalue>true</rtexprvalue>
        	</attribute>
        	
        </tag>
    

      

    •开发html转义标签
    package cn.gbx.web.example;
    
    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 jf = this.getJspBody();
    		StringWriter sw = new StringWriter();
    		jf.invoke(sw);
    		String content = sw.toString();
    		content = filter(content);
    		this.getJspContext().getOut().write(content);
    		
    	}
    	//对标签体内的内容进行转义
        public  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());
        }
    }
    

      

        <tag>
        	<name>filter</name>
        	<tag-class>cn.gbx.web.example.HtmlFilterTag</tag-class>
        	<body-content>scriptless</body-content>
        </tag>
    

      

     
  • 相关阅读:
    2014年第五届蓝桥杯省赛试题(JavaA组)
    2013年第四届蓝桥杯省赛试题(JavaA组)
    2013蓝桥杯JavaA组T10 大臣的旅费(树的直径)
    CodeForces
    天梯赛 L2-006 树的遍历(序列建树)
    PAT甲 1095 解码PAT准考证/1153 Decode Registration Card of PAT(优化技巧)
    2015年第六届蓝桥杯省赛T10 生命之树(树形dp+Java模拟vector)
    ZOJ
    SPOJ
    HDU
  • 原文地址:https://www.cnblogs.com/E-star/p/3555474.html
Copyright © 2011-2022 走看看