一、防盗链标签

import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class RefererTag extends SimpleTagSupport{
    private String name;
    private String page;
    public void setName(String name) {
        this.name = name;
    }
    public void setPage(String page) {
        this.page = page;
    }
    
    @Override
    public void doTag() throws JspException, IOException {
        PageContext pageContext=(PageContext) this.getJspContext();
        HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
        String referer=request.getHeader("Referer");
        JspFragment jf=this.getJspBody();
        System.out.println(name);
        System.out.println(referer);
        if(referer==null||!referer.startsWith(name)){
            HttpServletResponse response=(HttpServletResponse) pageContext.getResponse();
            response.sendRedirect("page");
        }else{
            
        }
    }
}

<tag>
        <description>description</description>
        <name>referer</name>
        <tag-class>web17.tag.RefererTag</tag-class>
        <body-content>scriptless</body-content>
        <!-- 设置属性 -->
        <attribute>
            <name>name</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>page</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

  测试

  <h1>首页</h1>
      <a href="./test.jsp">测试</a>

二、if标签

  package web17.tag;

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>
        <description>description</description>
        <name>if</name>
        <tag-class>web17.tag.IfTag</tag-class>
        <body-content>scriptless</body-content>
        <!-- 设置属性 -->
        <attribute>
            <name>test</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

  测试

  <c:if test="${1==1 }">1==1为真执行</c:if>
      <c:if test="${1>=2 }">1>=2为真执行</c:if>

三、选择(if-else)标签

  package web17.tag;

import java.io.IOException;

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

public class ChooseTag extends SimpleTagSupport{
    private boolean isOk;
    
    public boolean isOk(){
        return isOk;
    }
    public void setOk(boolean isOk){
        this.isOk=isOk;
    }
    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf=this.getJspBody();
        jf.invoke(null);
    }
}
  package web17.tag;

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 {
        JspFragment jf=this.getJspBody();
        if(test){
            jf.invoke(null);
        }else{
            
        }
    }
}

  package web17.tag;

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 ct=(ChooseTag) this.getParent();
        JspFragment jf=this.getJspBody();
        if(ct.isOk()){
            jf.invoke(null);
        }else{
            
        }
    }
}

  <tag>
        <description>description</description>
        <name>choose</name>
        <tag-class>web17.tag.ChooseTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>
     <tag>
        <description>description</description>
        <name>when</name>
        <tag-class>web17.tag.WhenTag</tag-class>
        <body-content>scriptless</body-content>
        <!-- 设置属性 -->
        <attribute>
            <name>test</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
    <tag>
        <description>description</description>
        <name>otherwise</name>
        <tag-class>web17.tag.OtherWiseTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>

  测试

  <h1>选择执行</h1>
      <c:choose>
          <c:when test="${1==1 }">1==1</c:when>
          <c:otherwise>1!=1</c:otherwise>
      </c:choose>

四、迭代标签

  package web17.tag;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

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

public class ForEachTag extends SimpleTagSupport{
    private String var;
    private Object items;
    
    public void setVar(String var) {
        this.var = var;
    }

public void setItems(Object items) {
        this.items = items;
    }

@Override
    public void doTag() throws JspException, IOException {
        JspFragment jf=this.getJspBody();
        if(items!=null){
            if(items instanceof List){
                List item=(List)items;
                for(int i=0;i<item.size();i++){
                    Object v=item.get(i);
                    this.getJspContext().setAttribute(var, v);
                    jf.invoke(null);
                }
            }else if(items instanceof Set){
                Set set=(Set)items;
                Iterator<Set> it=set.iterator();
                while(it.hasNext()){
                    Object v=it.next();
                    this.getJspContext().setAttribute(var, v);
                    jf.invoke(null);
                }
            }else if(items instanceof Map){
                Map map=(Map)items;
                Set<Map.Entry> set=map.entrySet();
                Iterator<Entry> it=set.iterator();
                while(it.hasNext()){
                    Entry entry=it.next();
                    this.getJspContext().setAttribute(var, entry);
                    jf.invoke(null);
                }
            }else if(items instanceof int[]){
                int arr[]=(int[]) items;
                for(int i=0;i<arr.length;i++){
                    this.getJspContext().setAttribute(var, arr[i]);
                    jf.invoke(null);
                }
            }
        }
    }
}

   <tag>
        <description>description</description>
        <name>forEach</name>
        <tag-class>web17.tag.ForEachTag</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>

  测试

  <%
          List<String> list=new ArrayList<String>();
          list.add("zsf1");
          list.add("zsf2");
          list.add("zsf3");
          pageContext.setAttribute("list", list);
       %>
       <br/>
       <c:forEach items="${list}" var="x">
           ${x }
       </c:forEach>
      
      
       <%
          Set<String> set=new HashSet<String>();
          set.add("zsf11");
          set.add("zsf22");
          set.add("zsf33");
          pageContext.setAttribute("set", set);
       %>
       <br/>
       <c:forEach items="${set}" var="x">
           ${x }
       </c:forEach>
      
      
       <%
          Map<String,String> map=new HashMap<String,String>();
          map.put("name1","zsf111");
          map.put("name2","zsf222");
          map.put("name3","zsf333");
          pageContext.setAttribute("map", map);
       %>
       <br/>
       <c:forEach items="${map}" var="x">
           ${x.key }
           ${x.value }
       </c:forEach>
       <br/>
       <%
           int[] arr={1,2,3,4};
           pageContext.setAttribute("arr", arr);
        %>
        <c:forEach items="${arr }" var="r">${r }</c:forEach>

五、html转义标签

  package web17.util;

public class HtmlFilter {
    public static String htmlFilter(String content) {
        //定义字符数组
        char chars[]=new char[content.length()];
        //把字符串直接复制到chars[]数组中
        content.getChars(0, content.length(), chars, 0);
        StringBuffer sb=new StringBuffer();
        for(int index=0;index<chars.length;index++){
            char c=chars[index];
            switch (c) {
            case '>':
                sb.append("&gt;");
                break;
            case '<':
                sb.append("&lt;");
                break;
            default:
                sb.append(c);
                break;
            }
        }
        return sb.toString();
    }
}

  package web17.tag;

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

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

import web17.util.HtmlFilter;

public class EscapeTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        //获取操作对象
        JspFragment jf=this.getJspBody();
        //写到流中
        StringWriter sw=new StringWriter();
        //写入该流
        jf.invoke(sw);
        //获取这个内容
        String content=sw.getBuffer().toString();
        String sb = HtmlFilter.htmlFilter(content);
        //输出
        JspWriter out=this.getJspContext().getOut();
        //写出
        out.println(sb);
    }

}

  <tag>
        <description>description</description>
        <name>escape</name>
        <tag-class>web17.tag.EscapeTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>

  测试

  <c:escape>
            <a href="">点点</a>
        </c:escape>

JavaWeb学习记录(十九)——开发JSTL自定义标签的更多相关文章

  1. JavaWeb学习记录(十九)——jstl自定义标签库之传统标签

    一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...

  2. JavaWeb学习记录(十九)——jstl自定义标签之简单标签

    一.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法 二.方法介绍 osetJspContext方法 用 ...

  3. JavaWeb学习笔记(九)—— JSTL标签库

    一.JSTL概述 1.1 什么是JSTL  JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  4. javaweb学习总结(十九)——JSP标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  5. JavaWeb学习记录(九)——Cookie的增加、删除、查看

    一.servlet功能代码: public void doGet(HttpServletRequest request, HttpServletResponse response)           ...

  6. javaweb学习总结十九(http协议概述以及http请求信息分析)

    一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...

  7. Bootstrap3.0学习第十九轮(JavaScript插件——标签页)

    详情请看 http://aehyok.com/Blog/Detail/46.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  8. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  9. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

随机推荐

  1. POJ 1741 树上的点分治

    题目大意: 找到树上点对间距离不大于K的点对数 这是一道简单的练习点分治的题,注意的是为了防止点分治时出现最后分治出来一颗子树为一条直线,所以用递归的方法求出最合适的root点 #include &l ...

  2. c#读取文本文档实践1-File.ReadAllLines()

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. CSS实现图片变灰色及透明度

    [图片变灰] 每当遇到哀悼日,很多网站快速变灰色,来看看实现方式吧: 方式一,仅支持ie) html{filter:progid:DXImageTransform.Microsoft.BasicIma ...

  4. 测试bug级别定义

    致命bug:不能完全满足系统要求,系统停止运行,系统的重要部件无法运行,系统崩溃或者挂起等导致系统不能正常运行. 修改优先级为最高,该级别问题需要立即修改. 1.系统崩溃 2.导致程序重启,死机或非法 ...

  5. Visual Studio安装卸载模板

    Visual Studio中有两种类型的模板:项目模板和项模板 一.已安装模板: 默认情况下,与产品一起安装的模板位于以下位置: ①\<Visual Studio 安装目录>\Common ...

  6. iphone/ipod网页开发教程及规则

    侦测iPhone/iPod 开发特定设备的移动网站,首先要做的就是设备侦测了.下面是使用Javascript侦测iPhone/iPod的UA,然后转向到专属的URL. if((navigator.us ...

  7. 使用变量替换批量部署GoldenGate

    GoldenGate运行时允许在参数文件中动态指定一个值,即在参数文件中使用一个变量,而不是一个静态的值,当启动OGG进程时,根据环境动态加载此变量的值,达到在不同环境中,通过变量定义,实现多个环境的 ...

  8. phpunit+selenium环境搭建

    这个环境搭建遇到了挺多麻烦,最终还是没能自己解决,幸好有同事“青蛙”的帮忙解决了这个问题!在这里把本人亲测步骤给大家列一下,希望给大家提供方便! 安装pear: Go-pear.phar下载地址:ht ...

  9. 2016 - 1 - 19NSOpertation的依赖关系和监听

    一:NSOperation的依赖: 1.概念:队列中的A操作需要等其他B操作或者某些操作执行完毕后才执行,就叫做A依赖与B或者A依赖于其他某些操作. 2.注意点:不能循环依赖,否则卡死.如: [op2 ...

  10. error: Apostrophe not preceded by \

    解决方案为:在编译出错提示中找到相关的string.xml文档,在string标签中的字符串含有单引号(')前面,加上反斜杠(\)转义即可.