JSP自定义标签
2013-07-01 21:26
253 查看
JSP自定义标签的用途:
移除JSP中java代码(JSP规范不允许在jsp中出现java代码)JSP自定义标签处理器的API:
传统JSP自定义标签的解析过程:
web容器在解析jsp时发现页面中有jsp标签,查找tld文件后会去创建对应的标签处理类对象,标签处理类实例化之后相继调用setPageContext( )方法---------->setParent(Tag parent)---------->doStartTag( )--------->执行标签体---------->doAfterBody( )---------->doEndTag( )---------->web应用退出时调用release( )JSP自定义标签的创建过程:
1、创建一个对应的标签处理类程序员自定义的jsp标签处理类必须直接或间接地实现JspTag接口。JSP提供了很多JspTag的子接口,例如:Tag、IterationTag、BodyTag。JSP同时提供了一些已经实现JspTag子接口的类,比如:TagSupport、BodyTagSupport。为了简化开发,标签处理类一般继承TagSupport、BodyTagSupport。
TagSupport中的常用方法:
doStartTag( ) :标签开始时执行何种操作
doAfterBody():标签体执行之后,doEndTag( )执行之前调用该方法
doEndTag( ) :标签结束时执行何种操作
release( ) :web容器执行完自定义标签后,标签处理器会驻留在内存中,为其他请求服务,直至web应用停止时,web容器才会调用release( ) 方法,释放标签处理器占据的资源。
setParent(Tag parent) :设置父标签
getParent( ) : 获取父标签
setPageContext(ageContext pageContext):设置pageContext对象
其中:setPageContext( )是核心方法,该方法在web容器创建标签处理类对象后自动调用,设置了pageContext对象后,标签处理类对象就能获取其他的jsp对象,进而获取当前web的一切资源。
getPageContex( ) : 获取pageContext对象
BodyTagSupport继承了TagSupport,提供了修改标签体的方法:
setBodyContent(BodyContent bodyContent):设置标签体
doStartTag( ) 的常用返回值:
Tag.SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
Tag.EVAL_BODY_INCLUDE 表示在现有的输出流对象中处理标签体,但绕过setBodyContent()和doInitBody()方法
BodyTag.EVAL_BODY_BUFFERED 表示需要处理标签体,且需要重新创建一个缓冲(调用setBodyContent方法)。
doAfterBody()的常用返回值:
IterationTag.EVAL_BODY_AGAIN 对标签体循环处理。(存在于javax.servlet.jsp.tagext.IterationTag接口中)
doEndTag( )的常用返回值:
Tag.SKIP_PAGE 忽略标签后面的jsp(SUN企业级应用的首选)内容。
Tag.EVAL_PAGE 处理标签后,继续处理jsp(SUN企业级应用的首选)后面的内容。
SimpleTag接口的提出是为了集中Tag、IterationTag、BodyTag的功能
JSP自定义标签的标签处理器如果是实现SimpleTag接口的标签处理器,则web解析JSP
自定义标签的过程是:
标签处理器实例化之后相继调用-------->setJspContext(JspContext context)-------->setParent(JspTag parent)-------->setJspBody(JspFragment body)-------->doTag()-------->标签解析结束
SimpleTagSupport是SimpleTag接口的一个实现类,SimpleTagSupport的常用方法:
setJspContext(JspContext context) : 设置JspContext对象(JspContext本质就是pageContext)
getJspContext( ) : 获取JspContext对象,继而获取Web应用的一切资源
setParent(JspTag parent) : 设置父标签
getParent( ) : 获取父标签
setJspBody(JspFragment body) :获取JspFragment对象(JspFragment封装了标签体)
getJspBody( ) :获取JspFragment对象
doTag( ) : 指定标签处理过程,默认什么都不做
补充:开发带属性的自定义标签,只需在标签处理器内部追加属性即可
2、创建tld文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>MyTagLib</short-name>
<uri>http://www.tangxiong.cn.mytaglib</uri>
<tag>
<name>hello</name>
<tag-class>com.tangxiong.web.HelloTagHandler</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
tld文件说明:
<taglib>
<tlib-version>此标签库的版本
<jsp-version>此标签库依赖的jsp版本
<short-name>此标签库的名字,无实际意义
<uri>指定该tld文件的网络地址
<validator>该标签库的验证信息
<listener>监听器
<tag>某个标签
<name>标签名
<tag-class>标签处理类
<body-content>标签体,其值可为empty/JSP/scriptless/tagdependent
<attribute>某个属性
<name>属性名
<required>该属性是否必须,true/false
<rtexprvalue>该属性是否可以接收一个运行时表达式的值(例如:EL表达式)
<taglib>
JSP页面使用jsp标签的指令:
<%@ taglib uri="http://www.tangxiong.cn.mytaglib" prefix="my"%>相关文章推荐
- jsp自定义标签
- 关于JSP自定义标签的几点说明
- JSP自定义标签
- 自定义标签(JspFragment类、invoke方法、开发带属性的标签)
- jsp自定义标签
- (转)掌握jsp自定义标签:(七)
- jsp使用自定义标签taglib分页系列——avantouch-common.tld
- jsp自定义标签
- jsp2.0的tag,jsp自定义标签,类似jsp动态include
- JSP自定义标签遇见的异常
- JSP 自定义标签
- jsp自定义标签学习
- jsp自定义标签
- jsp自定义标签
- JSP自定义标签(二) 联想查询
- JSP自定义标签
- Java程序员从笨鸟到菜鸟之(二十)jsp自定义标签
- jsp2.0自定义标签(一)
- JSP自定义标签就是如此简单
- JSP自定义标签简单入门教程