《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 ...
随机推荐
- MySQL实战 | 05 如何设计高性能的索引?
原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构.今天带你了解如何设计高性能的索引. 其中,有这么一个点,说的是 InnoDB 引擎中使用的 ...
- LeetCode Number of Longest Increasing Subsequence
原题链接在这里:https://leetcode.com/problems/number-of-longest-increasing-subsequence/description/ 题目: Give ...
- Js里头的对象字面量
JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ) ...
- (二 )结构ztree的 ajax交互的简单使用
在第一篇的基础上更改,在实际项目中的使用. 一:HTML 代码: <SCRIPT type="text/javascript"> var setting = { asy ...
- WebForm中创建树节点TreeNode
Tree: namespace ECTECH.NorthSJ.Web.SysData { public partial class testTree : BasePage { ; protected ...
- JSF在ui:include中传递参数到对应控制层
在JSF中使用ui:include方法可以引入一个页面到当前页面中,如果要向被包含的页面中传入参数,可以使用ui:param标签,这个标签类似于f:param,只不过一个用于页面,一个用于实际标签.示 ...
- iperf 网络测速
1.介绍 1) # ipref -g //这个最直观 2)Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能.Iperf具有多种参数和UDP特性,可以根据需要调整. ...
- oracle的自增长
mysql的自增长非常容易,一个 AUTO_INCREMENT 就搞定,可是oracle就不行了 下面是oracle的自增长 #创建一个表CREATE TABLE T_TEST_DEPARTMENTS ...
- 2016.7.10 SqlServer语句中类似decode、substr、instr、replace、length等函数的用法
Decode() 对应 case when函数 case CHARINDEX('/',start_point_name) when 0 then start_point_name else subst ...
- 2016.3.7 Word2007编号设置
1.点击下图红圈出的下拉箭头 2.点击下图新建样式按钮 3.在弹出窗口中,设置名称AAA(方便稍后的查找修改),样式类型改为列表,点击编号 4.在弹出的窗口中以此设置各级标题的编号样式,保存后设置成功 ...