《Head First Servlets & JSP》-10-定制标记开发
标记文件:很想include,但是比include更好
- 建立和使用标记文件的最简方法
- 取一个被包含文件(如Header.jsp),把它重命名为带有一个.tag扩展名(Header.tag);
- 把标记文件(Header.tag)放在WEB-INF目录下一个名为tags的目录中;
- 在JSP中放一个taglib指令(有一个tagdir属性),并调用这个标记;
如何向标记文件发送参数?
对于标记文件,发送的不是请求参数,而是标记属性!
在JSP中调用标记:
在标记文件中使用属性:
如何定义标记文件中所需要的属性——使用attribute指令
attribute指令只能由标记文件使用,它与定制TLD中的tag部分的attribute子元素有些相似。
若属性值很大,则把属性从标记文件中取出来,作为体。即在标记文件中不要attribute指令了:
- 如果没有TLD,那么如何声明体中的内容?——tag指令
标记文件中不但有attribute指令,还有tag指令,tag指令有body-content属性可以声明标记文件的体内容的类型。body-content属性的值有以下三种:
scriptless(default) | tagdependent | empty |
---|---|---|
不允许脚本 | 标记体看作纯文本 | 标记体中什么也没有 |
实际上,标记文件标记的体中绝对不允许有scriptlet脚本(可以有EL表达式)。
- 容器在哪里查找标记文件?
容器会在4个位置查找标记文件:
- 直接在WEB-INF/tags目录中查找
- 在WEB-INF/tags的子目录中查找
- 在WEB-INF/lib下的JAR文件的META-INF/tags目录中查找
- 在WEB-INF/lib下的JAR文件的META-INF/tags的子目录中查找
注意,如果标记文件部署在一个JAR中,这个标记文件必须有个TLD;若直接凡在Web应用中,就不需要TLD。
如果标记文件还不够,有时还需要Java
到目前为止,利用标记文件,非Java程序员也能建立定制标记。因为无涉及Java类来处理标记的功能,也不涉及为标记文件建立TLD。
但是,若想要自己编写的标记文件可被别人以JAR的形式调用,那么必须要有TLD,甚至标记处理器(Java类)。
- 标记处理器
标记处理器不同于标记文件,他是完成标记工作的Java类,与EL函数有些相似,但是更强大更灵活。
EL函数只是一些静态方法,而标记处理器类可以访问标记属性、标记体,甚至能访问页面上下文,从而得到作用域属性和请求及响应。 - 定制标记处理器的两种类型:简单和传统
一般来说,简单类型几乎能满足所有需要。
建立一个简单标记处理器
- 一般步骤
- 编写一个扩展SimpleTagSupport的类
- 实现doTag()方法
- 为标记创建一个TLD
- 部署标记处理器和TLD
编写一个使用标记的JSP
一个例子
简单标记处理器的生命周期
自己定制一个有属性简单标记(类似c:forEach?)
停止页面处理——SkipPageException
停止页面处理,不仅仅是抛出异常,而是希望页面已经处理的前一部分作为响应出现,但是不会出现因为某些原因停止处理的后一部分。
可见标记以后的页面信息(Back in the page ….)没有输出!
若从一个被包含页面调用标记,会发生什么情况?
SkipPageException只是停止直接调用标记的页面,外层页面会仍然继续执行。
简单标记的要点
简单标记和传统标记的区别
传统标记对比简单标记可以看看:
《Head First Servlets & JSP》-10-定制标记开发的更多相关文章
- 《Head First Servlets & JSP》-9-使用JSTL
安装JSTL1.1的说明 JSTL1.1不是JSP2.0规范的一部分,能访问servlet和JSP API并不意味着能访问JSTL. 使用JSTL之前,需要将jstl.jar文件安装到Web应用的WE ...
- Head First Servlets & JSP 学习笔记 第九章 —— 使用JSTL
JSTL1.1 不是JSP2.0规范的一部分!你能访问Servlet和JSP API 不意味着你能访问JSTL! 使用JSTL之前,需要将两个文件("jstl.jar" 和 &qu ...
- 《深入浅出Windows 10通用应用开发》
<深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...
- 《Head First Servlets & JSP》-7-使用JSP
学习的知识点 JSP,最后会变成一个servlet JSP最终或变成一个完整的servlet在Web应用中运行,只不过这个servlet类会由容器写好. JSP中的scriptlet 所谓script ...
- 《Head First Servlets & JSP》-8-无脚本的JSP
以前servlet和JSP交互的代码 servlet代码示例: JSP代码示例: 若属性不是一个String而是一个Bean呢? 一个简单的JavaBean servlet代码示例: JSP代码示例: ...
- 《Head First Servlets & JSP》-1-前言
<Head First Servlets & JSP>(中文版) BB,KS & BB著, 苏钰函,林剑译,中国电力出版社 数据交互 Web浏览器和Web服务器:通过Htt ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...
- 深入分析JavaWeb Item23 -- jsp自己定义标签开发入门
一.自己定义标签的作用 自己定义标签主要用于移除Jsp页面中的java代码. 二.自己定义标签开发和使用 2.1.自己定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 要编写一 ...
- kettle系列-4.kettle定制化开发工具类
要说的话这个工具类还是比较简单的,每个方法体都比较小,但用起来还是可以的,把开发中一些常用的步骤封装了下,不用去kettle源码中找相关操作的具体实现了. 算了废话不多了,直接上重点,代码如下: im ...
随机推荐
- ENTRYPOINT 与 CMD
在Dockerfile中 ENTRYPOINT 只有最后一条生效,如果写了10条,前边九条都不生效 ENTRYPOINT 的定义为运行一个Docker容器像运行一个程序一样,就是一个执行的命令 两种写 ...
- django的settings文件
转载:http://www.cnblogs.com/likeshan168/articles/3596344.html
- 「新手向」koa2从起步到填坑
前传 出于兴趣最近开始研究koa2,由于之前有过一些express经验,以为koa还是很好上手的,但是用起来发现还是有些地方容易懵逼,因此整理此文,希望能够帮助到一些新人. 如果你不懂javascri ...
- webpack 配置简单说几句 ?
前言 这几天在准备一个单页面应用, 准备试试webpack神器,在准备webpack下的知识点,顺便记录下一些使用的心得. webpack 的配置说明 在近来的前端开发中,业务逻辑复杂化,层次多样化, ...
- bzoj 3505 [Cqoi2014]数三角形——排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...
- unix下网络编程之I/O复用(一)
什么是I/O复用? What we need is the capability to tell the kernel that we want to be notified if one or mo ...
- JDK 8 - JVM 对类的初始化探讨
在<深入理解 Java 虚拟机>(第二版,周志明著)中,作者介绍了 JVM 必须初始化类(或接口)的五种情况,但是是针对 JDK 7 而言的. 那么,在 JDK 8 中,这几种情况有没有变 ...
- [cinder] volume type 使用简记
cinder type-create sharecinder type-key share set volume_backend_name=GLUSTERFScinder type-create lo ...
- #pragma pack 在BITMAP结构体定义中的使用
BITMAP位图文件主要分为如下3个部分: 块名称 对应Windows结构体定义 大小(Byte) 文件信息头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 4 ...
- C# Dynamic通用反序列化Json类型并遍历属性比较
背景 : 最近在做JAVA 3D API重写,重写的结果需要与原有的API结果进行比较,只有结果一致时才能说明接口是等价重写的,为此需要做一个API结果比较的工具,比较的内容就是Json内容,但是为了 ...