- 标记处理器:是一个完成标记工作的java类
- 标记处理器的功能:
- 可以访问标记属性、标记体
- 可以访问页面上下文
- 可以丛页面上下文中得到作用域属性和请求响应
- 定制标记处理器的类型:
- 传统的标记处理器(JSP以前版本中的定制标记)
- 简单的标记处理器
- 建立一个简单的标记处理器的步骤:
- 编写一个扩展SimpleTagSupport的类(javax.servlet.jsp.tagext.SimpleTagSupport)
- 覆盖dogTag()方法
- public void doTag() throws JspException, IOException
- 创建标记处理器的TLD文件
<taglib .....>
<tlib-version>版本</tlib-version>
<uri>simpleTags</uri>
<tag>
<description></description>
<name>标记名</name>
<tag-class>标记处理器的完全限定类名</tag-class>
<body-content>empty or scriptles or tagdependet </body-content>
</tag>
</taglib>
- 部署标记处理器和TLD
- 使用标记:
- eg:<%@ taglib prefix="myTags" uri="SimpleTags" />
<myTags:标记名>
- 如果标记需要有体,则需要在TLD的<body-content>声明scriptles,在doTag()中添加一条语句:
- TLD中:
- <body-content>scriptless</body-content>
- doTag()中
- getJspBody().invoke(null);
- TLD中:
- 标记处理器的生命周期:
- 实例化标签处理类(无参)
- 调用setJspContext(JspContext)方法为处理器提供PageContext的引用
- 如果是嵌套标记,则调用setParent(JspTag)方法
- 如果标记有属性,则调用属性的设置方法
- 如果标记的<body-content>未声明为empty,而且标记有体,则调用setJspBody(JspPrament)方法
- 调用doTag()方法
- doTag()方法完成时,销毁对象
- JspFrament:
- 什么是JspFrament:JspFrament是表示JSP代码的一个对象
- 存在的意义:供别人调用
- JspFrament的功能:把标记体输出到响应
- JspFrament中不能包含任何脚本元素
- SkipPageException:停止处理页面:
- 功能:当页面出现错误后,抛出SkipPageException前的内容还会作为响应进行输出
- SkipPageException与JspException的区别:
- 当页面抛出异常时:
- JspException会产生错误页面
- SkipPageException则不会产生错误页面,产生异常前处理的内容还会被正常响应输出
- 当页面抛出异常时:
- SkipPageException只停止直接调用标记的页面