JavaWeb学习记录(十九)——jstl自定义标签库之传统标签
一、传统标签
(1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。
empty:表示标签没有标签体
scriptless:表示标签体可以包含EL表达式和JSP的动作元素,但不能包含脚本表达式
JSP:表示标签体可以包含JSP代码
tagdependent:表示标签体由标签本身去解析处理。若指定tagdependent,那么在标签体中所写的代码将作为纯文本原封不动地传给标签处理类,而不是将执行结果传给标签处理类
(3)开发人员在编写Jsp页面时,经常还需要在页面中引入一些逻辑:
SKIP_BODY 隐含0:跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE隐含1:将body的内容输出到存在的输出流中
SKIP_PAGE 隐含5:忽略剩下的页面。
EVAL_PAGE 隐含6:继续执行下面的页
(4)JSP 1.1和1.2规范中常用的接口主要有以下3个。
(1)<description>:标签库的一个文本描述。
(2)<tlib-version>:指定标签库的版本。
(3)<short-name>:为标签定义简短的名字,在taglib指令中可作为首选的前缀名使用。
(4)<uri>:定义一个URI,用于唯一地标识此标签库。
(5)<tag>:用于指定自定义标签的相关信息。
(6)<display-name>:为标签库指定一个简短的别名。
(7)<small-icon>:为标签库指定大小为16×16的小图标(gif或jpeg格式),该图标可在图形界面工具中显示。
(8)<large-icon>:为标签库指定大小为32×32的大图标(gif或jpeg格式),该图标可在图形界面工具中显示。
(9)<validator>:为标签库提供一个验证器。
(10)<listener>:为标签库提供一个监听器。
(11)<tag-file>:用于描述标签文件。
(12)<function>:用于指定在表达式语言中使用的函数。
(6)案例说明
//根据条件是否成立,决定是否执行标签体
public class TagDemo1 extends TagSupport {
@Override
public int doStartTag() throws JspException {
return Tag.SKIP_BODY;
}
}
页面:
<html>
<head>
<title>控制标签体是否执行</title>
</head>
<body>
<hytc:demo1>
xxxxxxxxxxxxxxx
</hytc:demo1>
</body>
</html>
2.忽略内容
public class TagDemo2 extends TagSupport {
@Override
public int doEndTag() throws JspException {
return Tag.SKIP_PAGE;
}
}
页面:
<hytc:demo2></hytc:demo2>
<html>
<head>
<title>用标签控制整个jsp是否执行</title>
</head>
<body>
This is my JSP page. <br>
</body>
</html>
3.//控制标签体重复执行10次
public class TagDemo3 extends TagSupport {
int x = 10;
@Override
public int doStartTag() throws JspException {
return Tag.EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException {
if(x>1){
x--;
return IterationTag.EVAL_BODY_AGAIN;
}else{
return Tag.SKIP_BODY;
}
}
}
页面:
<html>
<head>
<title>用标签控制页面内容重复执行</title>
</head>
<body>
<hytc:demo3>
aaaa
</hytc:demo3>
</body>
</html>
4.
public class TagDemo4 extends BodyTagSupport {
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
BodyContent bt = this.bodyContent;
String content = bt.getString();
content = content.toUpperCase();
JspWriter out = this.pageContext.getOut();
try {
out.write(content);
} catch (IOException e) {
throw new RuntimeException(e);
}
return super.doEndTag();
}
}
页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>修改jsp页面内容</title>
</head>
<body>
<hytc:demo4>
aaaaa
</hytc:demo4>
</body>
</html>
5.配置描述文件
<tag>
<name>demo1</name>
<tag-class>web_16.tag.TagDemo1</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>demo2</name>
<tag-class>web_16.tag.TagDemo2</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>demo3</name>
<tag-class>web_16.tag.TagDemo3</tag-class>
<body-content>JSP</body-content>
</tag>
<tag>
<name>demo4</name>
<tag-class>web_16.tag.TagDemo4</tag-class>
<body-content>JSP</body-content>
</tag>
JavaWeb学习记录(十九)——jstl自定义标签库之传统标签的更多相关文章
- JavaWeb 自定义标签库开发传统标签
自定义标签主要用于移除Jsp页面中的java代码. 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代 ...
- 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 ...
- javaweb学习总结(二十八)——JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- javaWeb学习总结(9)- JSTL标签库之核心标签
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- 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原理与演示 交互的数据不会存储在数据库里,一次 ...
随机推荐
- Python 条件判断 循环
age = 20 if age >= 18: print('your age is', age) print('adult') 根据Python的缩进规则,如果if语句判断是True,就把缩进的 ...
- Linux-Unix版本介绍
转自: http://blog.163.com/li_zhuangs/blog/static/195698098201182411360635/ < DOCTYPE html PUBLIC -W ...
- POJ 1845 求a^b的约数和
题目大意就是给定a和b,求a^b的约数和 f(n) = sigma(d) [d|n] 这个学过莫比乌斯反演之后很容易看出这是一个积性函数 那么f(a*b) = f(a)*f(b) (gcd(a,b) ...
- “更高效率:标准化+简约风+移动化”--K2 BPM老客户交流会
主题:工作流主数据标准化和移动工作流带来的企业沟通建设机会 嘉宾:李瑞延(盛大网络IT总监) 公司管理需要更好的工作流 -为决策提供依据 通过对各级业务公司各类流程数据的获取与分析,为管理决策提供必要 ...
- Codeforces Round #326 (Div. 2)-Duff in Love
题意: 一个数x被定义为lovely number需要满足这样的条件:不存在一个数a(a>1),使得a的完全平方是x的因子(即x % a2 != 0). 给你一个数n,求出n的因子中为love ...
- java基础之 反射
首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...
- 未能加载文件或程序集“System.WEB.DataVisualization, Version=3.5.0.0, Culture=neutral
项目打开 提示 如题错误. 最近用VS2010 + .NET Framework3.5SP1开发程序,使用了MsChart,但是部署到服务器的时候提示如下错误: 分析器错误消息: 未能加载文件或程序集 ...
- 《java版进制转换》
import java.util.Scanner; class 十进制转成十六进制_2 { public static void main(String[] args) { int num = 0; ...
- C#线程状态简析
在C# 语言世界中,当我们创建一个新的子线程,该线程状态为unstarted, 子线程开始之后,子线程状态为Running,IsAlive 为true: 线程响应 Thread.Start 并开始运行 ...
- 配置navigation bar外观
/* 配置navigation bar外观开始 */ self.navigationBar.translucent = YES; self.navigationBar.titleTextAttribu ...