JavaWeb学习记录(十九)——jstl自定义标签之简单标签
一、简单标签共定义了5个方法:
用于把JSP页面的pageContext对象传递给标签处理器对象
用于把父标签处理器对象传递给当前标签处理器对象
用于获得当前标签的父标签处理器对象
用于把代表标签体的JspFragment对象传递给标签处理器对象
用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。
三、接口方法的执行顺序
private PageContext pageContext;
private String name;
/**
     * 用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容。在doTag方法中可以抛出javax.servelt.jsp.
     * SkipPageException异常
     * ,用于通知web容器不再执行JSP页面中位于结束标记后面的内容,者等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况
     * *
     */
    @Override
    public void doTag() throws JspException, IOException {
        System.out.println("doTag");
    }
/**
     * 用于获得当前标签的父标签的处理器对象
     */
    @Override
    public JspTag getParent() {
        System.out.println("getParent");
        return null;
    }
/**
     * 用于吧代表标签体的JspFragment对象传递给标签处理器对象
     */
    @Override
    public void setJspBody(JspFragment jspBody) {
        System.out.println("setJspBody");
}
/**
     * 用于把JSP页面的pageContext对象传递给标签处理器对象
     */
    @Override
    public void setJspContext(JspContext pc) {
        this.pageContext = (PageContext) pc;
        System.out.println("setJspContext");
}
    /**
     * 用于把父标签处理器对象传递给当前标签处理器对象
     */
    @Override
    public void setParent(JspTag parent) {
        System.out.println("setParent");
}
/**
     * 属性是通过这个setter方法设置进来
     */
    public void setName(String name) {
        System.out.println("设置name属性"+name);
        this.name = name;
    }
}
public class TagDemo1 extends SimpleTagSupport {
@Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
    }
}
页面:
<html>
  <head>    
    <title>控制标签体是否执行</title>
  </head>
  
  <body>
       <hytc:demo1>
           xxxx
       </hytc:demo1>
  </body>
</html>
2.//控制标签体是否执行
public class TagDemo2 extends SimpleTagSupport {
@Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
        for(int i=0;i<10;i++){
            jf.invoke(null);
        }    
    }
}
页面:
<html>
  <head>    
    <title>控制标签体重复执行</title>
  </head>
  
  <body>
       <hytc:demo2>
           xxxx
       </hytc:demo2>
  </body>
</html>
3.//修改标签体
public class TagDemo3 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 = content.toUpperCase();
        
        this.getJspContext().getOut().write(content);
    }
    
}
页面:
<html>
  <head>    
    <title>修改标签体</title>
  </head>
  
  <body>
       <hytc:demo3>
           xxxx
       </hytc:demo3>
  </body>
</html>
4.//控制整个jsp是否执行
public class TagDemo4 extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        throw new SkipPageException();
    }
}
页面:
<hytc:demo4/>
<html>
  <head>    
    <title>修改标签体</title>
  </head>
  
  <body>
</body>
</html>
5.//
public class TagDemo5 extends SimpleTagSupport {
    
    private int count;
    private Date date;
public void setCount(int count) {
        this.count = count;
    }
    
    public void setDate(Date date) {
        this.date = date;
    }
@Override
    public void doTag() throws JspException, IOException {
        
        System.out.println(date);
        for(int i=0;i<count;i++){
            this.getJspBody().invoke(null);
        }
    }
}
页面:
<html>
  <head>    
    <title>My JSP '5.jsp' starting page</title>
  </head>
  
  <body>
    
    <hytc:demo5 count="5" date="<%=new Date() %>">
        aaaaaaa
    </hytc:demo5>    
    
  </body>
</html>
6.配置文件:
  <tag>
        <name>demo1</name>
        <tag-class>web_16.simpletag.TagDemo1</tag-class>
        <body-content>scriptless</body-content>
    </tag>
     
    <tag>
        <name>demo2</name>
        <tag-class>web_16.simpletag.TagDemo2</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    
     <tag>
        <name>demo3</name>
        <tag-class>web_16.simpletag.TagDemo3</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    
     <tag>
        <name>demo4</name>
        <tag-class>web_16.simpletag.TagDemo4</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    
     <tag>
        <name>demo5</name>
        <tag-class>web_16.simpletag.TagDemo5</tag-class>
        <body-content>scriptless</body-content>
        
        <attribute>
            <name>count</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        
        <attribute>
            <name>date</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
      </tag>
JavaWeb学习记录(十九)——jstl自定义标签之简单标签的更多相关文章
- javaweb学习总结(十九)——JSP标签
		
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
 - JavaWeb学习记录(九)——Cookie的增加、删除、查看
		
一.servlet功能代码: public void doGet(HttpServletRequest request, HttpServletResponse response) ...
 - javaweb学习总结十九(http协议概述以及http请求信息分析)
		
一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...
 - Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
		
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
 - 学习笔记:CentOS7学习之十九:Linux网络管理技术
		
目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...
 - 风炫安全WEB安全学习第十九节课  XSS的漏洞基础知识和原理讲解
		
风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解 跨站脚本攻击(Cross-site scripting,通常简称为XSS) 反射型XSS原理与演示 交互的数据不会存储在数据库里,一次 ...
 - python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
		
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
 - 风炫安全web安全学习第二十九节课 CSRF防御措施
		
风炫安全web安全学习第二十九节课 CSRF防御措施 CSRF防御措施 增加token验证 对关键操作增加token验证,token值必须随机,每次都不一样 关于安全的会话管理(SESSION) 不要 ...
 - 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
		
第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...
 - JavaWeb学习记录(十九)——jstl自定义标签库之传统标签
		
一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...
 
随机推荐
- DotNetBar v12.9.0.0 Fully Cracked
			
更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=12.9.0.0 如果遇到破解问题可以与我 ...
 - [windows驱动]windows8.1驱动调试前戏
			
人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...
 - ios创建bundle的图片资源文件(转)
			
在ios开发中为了方便管理资源文件,可以使用bundle的方式来进行管理,比如kkgridview里就是把所需的图片文件全部放在一个bundle来管理的 . 切记目前iOS中只允许使用bundle管理 ...
 - Cisco路由器的6种模式
			
Cisco路由器的6种模式 -------------------------------------------------------------------------------------- ...
 - js 微信分享
			
一. //js接口 var shareme; var urls = window.location.href; if(isWeiXin()){ var weifileref=document.cr ...
 - python基础之模块之os模块
			
os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小…… 另 ...
 - cout 计算顺序问题
			
cout输出流的执行顺序 下面是IBM的一道笔试题 #include <iostream> using namespace std; int fun( ) { cout << ...
 - 【LeetCode OJ】Palindrome Partitioning
			
Problem Link: http://oj.leetcode.com/problems/palindrome-partitioning/ We solve this problem using D ...
 - Git的环境搭建
			
Git时当下流行的分布式版本控制系统. 集中式版本控制系统的版本库是集中存放在中央处理器的,所以开发者要先从中央服务器获取最新的版本,编码后再将自己的代码发送给中央处理器.集中式版本控制系统最大的缺点 ...
 - Git使用详细教程
			
参考网址: http://www.admin10000.com/document/5374.html http://blog.sina.com.cn/s/blog_4f3b79d0010166ab.h ...