JSP自定义标签
来源:互联网 发布:教育调查数据报告 编辑:程序博客网 时间:2024/06/05 22:39
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中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标签编程----自定义标签
- JSP 自定义标签:简单标签
- JSP标签-JSTL-自定义标签
- JSP自定义标签-Select标签
- jsp 自定义标签---标签文件
- JSP自定义标签
- JSP自定义标签学习心得
- JSP自定义标签试验
- JSP 自定义标签库
- 自定义JSP标签
- 创建JSP自定义标签
- 关于自定义标签 jsp
- 关于自定义标签 jsp
- jsp 自定义分页标签
- JSP自定义标签简介
- JSP自定义标签例子
- jquery中操作HTML5中的dataattributes
- mysql中的自定义函数
- android 按钮设计中state_selected属性
- (转)在fusionio上mysql几个参数的修改说明
- 编写mysql存储过程时,最好设置SQL_MODE
- JSP自定义标签
- android中设置手机的语言系
- apache跟nginx的一个浅显区别
- mysql中的coalesce用法
- 2013年中国奢侈品电商市场销售额将达270美元
- struts2中的textfield设置为不可用
- Advanced Persistent Threat: Understanding the Danger and How to Protect Your Organization
- 2012值得关注的若干技术专题归纳推荐
- ibaits中的模糊查询写法