《Head First Servlets & JSP》-10-定制标记开发
2024-09-05 07:07:29
标记文件:很想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只是停止直接调用标记的页面,外层页面会仍然继续执行。
简单标记的要点
简单标记和传统标记的区别
传统标记对比简单标记可以看看:
最新文章
- Windows 基础知识2
- iframe自动高度
- Ajax PHP项目实战
- php的SAPI,CLI SAPI,CGI SAPI
- pandas 给数据打标签
- 【HMTL】3D标签球
- [转]在.Net中使用Oracle的表类型和对象类型
- LightOj_1342 Aladdin and the Magical Sticks
- Mysql、SqlServer和Oracle 添加、修改、删除 字段总结
- autolisp 列表 resbuf
- 作业还是作孽?——Leo鉴书79
- 【Egret】实现web页面操作PC端本地文件操作
- ES6异步操作Thunk、co和async
- 三、调试IIS启动域名配置
- 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
- C#设计模式之10:状态模式
- cartographer 安装
- nginx--service配置
- js中对象如何添加新属性?
- IntelliJ IDEA :Error:(1, 1) java: 非法字符: '\ufeff'
热门文章
- 如果两个人,两台电脑同时登录同一个帐号,同时对同一个账单提交,账单同时被服务器处理,那服务器应该先处理谁的,或者怎么规避这个问题。 非单点登录,重定向,stoken拦截器的问题
- windowsError:32
- webpack入门(四)——webpack loader 和plugin
- Yii 利用layer删除数据
- mysql 多表查询 左联 去重方法
- BZOJ4195:[NOI2015]程序自动分析
- Python学习笔记 - MySql的使用
- Ext.window.Window
- POJ2831(次小生成树问题)
- openwrt 按下回车才能显示图标信息