`

JSP自定义标签(tag)、如何使用自定义标签库、几种典型的标签、标签库接口和类的继承关系(第三天)

    博客分类:
  • jsp
 
阅读更多

JSP自定义标签(tag

什么是自定义标签?

1,用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;

2,可以非常紧密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力;

3,当一个JSP页面转变为servlet时,其间的用户自定义标签转化为操作一个称为标签hander的对象;

4,可操作默认对象,处理表单数据,访问数据库以及其它企业服务;

自定义标签库的特点

1,通过调用页面传递参数实现定制;

2,访问所有对JSP页面可能的对象;

3,修改调用页面生成的响应;

4,自定义标签间可相互通信;

5,在同一个JSP页面中通过标签嵌套,可实现复杂交互。

如何使用自定义标签库

1,声明标签库

2,使标签库执行对Web应用程序可用

声明标签库

1,使用taglib指令声明标签库

2语法<%@taglib uri="URI" prefix="pre" %>

注意:a. uri属性可以是绝对的,也可以是相对URL,该URL指向标记库描述符(TLD)文件;     

      b. uri属性也可以是一个并不存在的URL,该URLweb.xml文件中将标记库描述符(TLD)文件的绝对

URL到本地系统的一个映射;

3,范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %>              

         <%@taglib uri="http://java.sun.com/jstl/core" prefix="core" %>      

使标签库执行可用

方式一:在WEB-INF/classes目录下部署标记处理程序类;

方式二:将标记处理程序类打包成jar文件并置于WEB-INF/lib目录。

几种典型的标签

1,不带属性和主体的简单标签:<mytaglibs:SomeTag/>;

2,不带主体但有属性的标签:<mytaglibs:SomeTag user="TonyDeng"/>;

3,带有主体和属性的标签:

         <mytaglibs:SomeTag user="TonyDeng">                                                               

                  ...// 标签体                                  

         </mytaglibs:SomeTag>;

注意:a. 属性列于start tag中,它是在标记库描述符(TLD)文件中指定,服务于标记库的自定义行为;       

      b. 标签体位于start tagend tag间,可以是任何合法的JSP内容或者标签;

定义标签

1,开发实现tag的类(tag handler);

2,编辑标记库描述符(TLD)文件;

3,在web.xml中为标记库描述符(TLD)文件的绝对URL建立一个映射(该步骤可选);

标记库描述符(TLD)文件

1,一个描述标记库的XML文件;

2,内容开始是整个库的描述,然后是tag的描述;

3,标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具;

实现tag的类(标签处理器)(tag handler)

1,是一些在引用了标签的JSP页面执行期间被Web Container调用以求自定义标签值的对象;

2,必须实现Tag, SimpleTagBodyTag之一;

3,可以继承TagSupportBodyTagSupport之一。

标签库的接口和类的继承关系接口的继承关系:      

☉ interface javax.servlet.jsp.tagext.JspTag          

        ☉ interface javax.servlet.jsp.tagext.SimpleTag            

        ☉ interface javax.servlet.jsp.tagext.Tag            

               ☉ interface javax.servlet.jsp.tagext.IterationTag            

               ☉ interface javax.servlet.jsp.tagext.BodyTag

类的继承关系:      

         ☉ class javax.servlet.jsp.tagext.TagSupport

          (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)          

                ☉ class javax.servlet.jsp.tagext.BodyTagSupport

                 (implements javax.servlet.jsp.tagext.BodyTag)       

         ☉ class javax.servlet.jsp.tagext.SimpleTagSupport

            (implements javax.servlet.jsp.tagext.SimpleTag)

                  (Interface)                   

                     JspTag                     

                        |                             

                |ˉˉˉˉˉˉˉˉ|             

           (Interface)      (Interface)JSP2.0            

               Tag           SimpleTag ←--SimpleTagSupport              

                |                                          

                |            

            (Interface)           

           IterationTag←--TagSupport

           支持迭代的标签         |

                |                 |          

                |                 |   

            (Interface)           |               

             BodyTag ←-BodyTagSupport

            可以处理标签体

自定义标签的开发步骤

1,写标签处理器,也就是一个符合自定义标签规范的类 xxx.java

2,写标签库定义文件,也就是定义标签的格式规范,也要符合自定义标签的规范 xxx.tld

3,建上述两步中的相应文件进行部署。web.xml

tld文件中的配置

  <tag>

    <name>loop</name>

    <tag-class>com.tag.LoopTag</tag-class>

    <body-content>jsp</body-content>

    <!--设定自定义标签体内的内容,可以置为empty,也就是只能写空标签-->

    <attribute>

      <name>counter</name><!--配置自定义标签的属性名-->

      <required>true</required><!--配置属性是否必须出现-->

      <rtexprvalue>true</rtexprvalue><!--允许使用表达式作为属性的值-->

      <type>int<type><!--配置属性的类型-->

      </attribute>

  </tag>

简单的标签处理程序类

1,必须实现Tag接口的doStartTag()doEndTag()方法;

2,因为不存在BodydoStartTag()方法必须返回SKIP_BODY;

3,如其余页面要执行,doEndTag()方法返回EVAL_PAGE, 否则返回SKIP_PAGE;

4,对于每一个标签属性,你必须在标签处理程序类里定义一个特性以及getset方法以一致于JavaBeans   体系惯例

Body的自定义标签

1,必须实现Tag接口的doStartTag()doEndTag()方法;

2,可以实现IterationTag接口的doAfterBody()方法;

3,可以实现BodyTag接口的doInitBodysetBodyContent方法;

4doStartTag方法可以返回SKIP_BODYEVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(当你想使用     BodyContent);

5doEndTag方法可以返回SKIP_PAGEEVAL_PAGE;

6doAfterBody方法可以返回EVAL_BODY_AGAIN, SKIP_BODY;

定义脚本变量的标签(迭代标签)

1,定义脚本标签的二个步骤:  

   . 在标记库描述符(TLD)文件中列明脚本变量;  

   . 定义标签扩展信息类(TEI)并且在TLD文件中包括这个类元素(tei-class);

2,变量必须在标签处理程序类中使用pageContext.setAttribute()方法设置;

3,标签扩展信息类(TEI)

分享到:
评论

相关推荐

    jsp自定义标签开发+TLD文件元素详解+实例

    从JSP 1.1版本开始,开发者就已经能够利用自定义标签,而在JSP 2.0中,进一步引入了`SimpleTag`接口和`SimpleTagSupport`类,提供了更简洁的标签实现方式。 自定义标签的开发通常包括以下几个步骤: 1. **创建标签...

    JSP 自定义标签第1/3页

    JSP自定义标签是一种用于简化JSP页面编写、增强页面可维护性并支持多语言版本的XML元素。它们通过标签库来组织,每个库由一系列逻辑上相关联的标签组成。在自定义标签的实现过程中,涉及到几个核心的概念和组件,...

    JAVA分页标签-简单的分页标签

    这些标签库提供了预定义的标签,可以直接在JSP页面上使用,使得代码更加简洁和易于维护。 二、分页标签的工作原理 分页标签的工作原理通常包括以下几个步骤: 1. 用户请求一个页面,该页面包含分页标签。 2. JSP...

    定制标签库

    在IT行业中,定制标签库是一种常见的实践,尤其是在Web开发领域,它允许开发者根据特定项目或应用的需求创建自定义的功能和行为。"定制标签库"这个标题暗示了我们将在讨论如何构建和使用这样的库,以便更好地控制和...

    第一个JavaWeb应用

    1. **定义标签处理类**:这是一个实现了`javax.servlet.jsp.tagext.SimpleTag`或`javax.servlet.jsp.tagext.Tag`接口的Java类。 2. **创建TLD文件**:TLD(Tag Library Description)文件用于描述标签库的信息,包括...

    javaweb题库选择+笔试题

    **lib**:错误,这是存放第三方库或依赖包的位置。 - C. **classes**:错误,这通常用于存放编译后的`.class`文件。 - D. **WEB-INF**:正确,这个目录下可以存放配置文件,如自定义标签的配置文件。 - **结论**...

    java文档

    8. **第三十三章 Struts标记库**:Struts提供了丰富的标签库,使得在JSP页面中处理业务逻辑更加便捷。本章会涵盖Struts自定义标签的使用,如logic、bean、html等标签。 这些章节的内容相互关联,构成了一套完整的...

    cms后台管理

    Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...

    java判断试题.pdf

    **知识点**: JSTL 是一组用于编写和开发 JSP 页面的标准标签库。 **解析**: 正确。JSTL 确实为开发者提供了无需编写任何脚本代码就能完成常见任务(如循环、条件判断、国际化等)的能力,从而提高了 JSP 页面的可...

    超级有影响力霸气的Java面试题大全文档

     继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而...

Global site tag (gtag.js) - Google Analytics