JavaWeb---用户自定义标签

1.  什么是用户自定义标签?

Ø   JSP自定义标签是用户定义的JSP语言元素,可以看成是一种通过标签处理器生成基于XML脚本的方法。

Ø   自定义标签在功能上和逻辑上都与JavaBean类似,都是一组可重用的组件代码。

相较于JavaBean,自定义标签可以使Web开发者可以完全从Java编程中脱离开来,专注于页面显示和格式上面去,所以具有广阔的发展前景

2.  自定义标签的优点是什么?

分离了程序逻辑和表示逻辑

将Java代码从HTML中剥离,便于美工维护页面

减少了JSP页面中的脚本,减少了维护成本

提供了可重用的功能组件

3.  自定义标签的组成:

 一个自定义标签一般由JavaBean、标签库描述、标签处理器、web.xml文件配置、标签库声明等元素所构成

4.  自定义标签的作用:

JavaBean -à标签库用来执行所分配微软的基本代码模块

标签库描述-àxml文件记录标签处理器属性信息和位置信息

标签处理器-à标签库核心,对外部资源和访问信息进行处理

web.xml文件配置-à配置文件用来描述自定义标签TLD文件位置

标签库声明-à使用自定义表情,使用标签库指令进行声明

5.  自定义标签的声明:

 <%@ taglib prefix="pre"uri="URLToTagLibrary"%>

无论JSP页面中的自定义标签出现在什么位置,taglib指令都必须出现在页面的前端位置

6.  标签库表述符文件:

Ø   标签库描述符(TLD文件)是一个描述标签库的XML文档。TLD包含有关整个库以及库中包含的每一个标签的信息。它把自定义标签与对应的处理程序关联起来。TLD文件名称必须扩展名为.tld。

Ø   TLD文件存储在Web模块的WEB-INF目录下或者子目录下,并且一个标签库要对应一个标签库描述文件,而在一个描述文件中可以包含多个自定义标签的声明。

TLD文件的根元素是,该元素的子元素如下所示:

元素

说明

元素

说明

用于设置标签库版本

用于设置标签库的可选小图标

用于设置标签库要求的JSP规范版本

用于设置标签库的可选大图标

用于设置该标签库的助记名

用于设置标签库的描述信息

唯一标识该标签库的URI

用于设置标签库的监听器类

用于设置标签库显示的可选名

用于设置标签库的具体标签

 

7.  元素的方法:

元素是真正用来查找标签库中具体标签的

元素

说明

元素

说明

用于设置标签的唯一名称

用于设置标签的可选小图标

用于设置标签处理器的完全限定名

用于设置标签的可选大图标

用于设置脚本变量信息的子类名称

用于设置标签的描述信息

用于设置标签的正文内容类型

用于设置标签的脚本变量信息

用于设置标签显示的可选名

用于设置标签的属性信息

 

8.  标签处理器:

Ø   在标签处理器中定义了标签处理方法doStartTag()和doEndTag(),这两个方法分别在标签开始和结束时执行处理和输出动作。

Ø   这两个方法都要求分别返回一个状态码,通知JSP容器岁自定义标签的处理结果及整个JSP页面的运行状态。

状态码一共有四种,具体作用如下所示:

状态码

作用说明

EVAL_BODY_INCLUDE

当doStartTag()返回时,指明servlet应对标签进行评估

SKIP_BODY

当doStartTag()返回时,指明servlet应忽视标签体

EVAL_PAGE

当doEndTag()返回时,指明页面其余部分应被评估

SKIP_PAGE

当doEndTag()返回时,指明页面其余部分就被跳过

 

9.    简单格式的标签开发:

Ø   简单格式的标签没有属性和体,它需要实现Tag接口中的doStartTag()和doEndTag()方法。

Ø   当Web容器遇到开始标签时会自动调用doStartTag()方法。由于简单格式的标签没有体,所以这个方法会直接返回一个SKIP_BODY。

Ø   在遇到结束标签的时候会调用doEndTag()方法。如果还需要页面中的其他部分进行判断,则doEndTag()方法会返回EVAL_PAGE,否则,会返回SKIP_PAGE。

 

10.    实现自定义标签:

package com.msit.tag;

 

import java.io.IOException;

 

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

/**

 * 定义第一个输出内容的自定义标签处理类

 * @author admin

 *

 */

@SuppressWarnings("serial")

publicclassMytagPrint extendsTagSupport {

   @Override

   publicint doStartTag() throws JspException {

      //创建页面输出对象

      JspWriterout = pageContext.getOut();

      try {

         out.print("这是第一个自定义输出");

      }catch(IOException e) {

         e.printStackTrace();

      }

      returnSKIP_BODY;//skip 跳过或忽略

   }

  

   @Override

   publicint doEndTag() throws JspException {

      returnEVAL_PAGE;//eval  评估或处理

   }

}

Web文件配置:

<jsp-config>

 <taglib>

  <taglib-uri>/msit/myprinttaglib-uri>

  <taglib-location>/WEB-INF/Myprint.tldtaglib-location>

 taglib>

jsp-config>

Tld文件配置

<short-name>ptshort-name>

 <uri>/myprinturi>

 <tag>

 <name>myprintname>

 <tag-class>com.msit.tag.MytagPrinttag-class>

 <body-content>emptybody-content>

 tag>

在页面输出:

<%@ taglib uri="/msit/myprint"prefix="p" %>

   调用自定义标签:<br>

   <p:myprint />

你可能感兴趣的:(Java学习)