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 ...
随机推荐
- POJ 1739
楼教主男人八题之一... 题目大意: 求从左下角经过所有非障碍点一次到达右下角的方案数 这里不是求回路,但是我们可以考虑,在最下面一行再增加一行,那么就可以当做求此时左下角到右下角的回路总数,那么就转 ...
- Quartz 2D--长方形和线条绘图
今天原本想模仿2048 游戏的. 但是在设计背景环境时,涉及到绘图的知识!于是就开始对绘图进行了一翻学习. 若想自己绘图必须 写自己的View(继承UICView):然后重写UIView 中的 dra ...
- SQL Server CONVERT() 函数(转)
定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(data_type(length),dat ...
- Java选择结构、循环结构
1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; ...
- 《day11---内部类&匿名内部类》
//79-80-面向对象-内部类-体现 /* 当A类中的内容要被B类直接访问,而A类还需要去创建B类的对象,访问B的内容时, 这时可以将B类定义到A类的内部,这样访问更为便捷. 将B类称之为内部类(内 ...
- js对象的定义及处理
一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascrip ...
- hdu 2022
Ps:麻蛋...第一次想得太复杂了..用字符串组来存.越弄越傻逼...后来用int就行了... 代码: #include "stdio.h"#include "stdli ...
- 什么php?
PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的语法借鉴吸收了C语言.Java和Perl等流行计算机语言的特点,易于一般程序员学习.PHP的主要目标是允许网络开 ...
- "This connection is untrusted" - Firefox error message
Error Messages I am receiving the following error message in Firefox: After selecting Cancel to clos ...
- N的阶乘的长度
阶乘是乘法 , 乘法的话 , 几位数*几位数的位数 就是 哪两个几位数相加 . 这个可以用log10来解决 , 所以有如下代码 . #include<stdio.h> #include& ...