自定义标签_简单标签
- 格式:ppt
- 大小:209.00 KB
- 文档页数:28


JavaEE自定义标签:标签类的创建、tld配置文件的创建(位置、如何创建)、Web-XML配置、JSP应用1、标签以类似于html标签的方式实现的java代码的封装。
第一:形成了开发标签的技术标准---自定义标签的技术标准。
第二:java标准标签库(sun之前自己开发的一系列的标签的集合)jstl,以及表达式语言E L。
2、自定义标签(1)理解:可以允许用户自己根据自己的需要,去开发自己的标签的技术规范。
通俗:在Jsp页面上,以简单的标签封装java代码的操作。
//在自定义标签类中,先调用setPageContext()实例化内置对象://然后是doStartTag()方法,核心代码放在这个方法里面://定义变量,变量的Get、Set方法: private String UserName = "";//tld配置文件放置在WEB-INF目录下,主要的标记如下,主要的配置如下://前面tlib-version版本号、Jsp-version JSP的版本号、short-name 命名空间、是必须有的//uri,注意是uri而不是url,url是访问的路径。
//而uri为访问时候的别名,写在JSP页面上的标签的别名。
//name为此标签类的别名,tag-class 为标签类的存放的物理路径//body-content 为是否有标签体,如果是/子关闭标签设置为EMPTY//如果涉及到标签属性,可以设置attribute,其中name为属性的名称,而不是别名,required 属性是否必须设置,rtexprvalue 是否程序运行时候为属性赋值。
//如果在tld文件中不设置uri,则在web-xml中必须对talib-uri进行设置。
//在JSP页面中,用taglib指令导入自定义标签。
//JSP页面上的使用,前面my为tld文件中为标签类定义的命名空间、hello为tld文件中指定标签类的别名:(2)技术组成A:标签处理类:实现所有信息显示功能的Java类B:标签配置文件(标签描述文件、库文件):是一个遵守xml规范的tld文件(扩展名为TLD)C:配置web.xml:告诉web应用,需要引用其他的标签信息D:jsp页面上,调用标签3、标签的特点(1)分类A:成对出现的标签B:自关闭的标签(2)特点A:标签必须正确的关闭B:标签不能出现重名C:标签可以有标签体也可以没有D:标签可以有属性,但是一个标签不能出现同名属性最简单的标签:没有标签体也没有属性的标签4、自定义标签的开发流程(上面的插图)A:明确要实现的功能:要在页面显示具体什么内容B:开发标签处理类C:创建以及配置标签描述文件:TLD文件D:配置web.xmlE:jsp页面调用标签5、开发标签处理类(1)父类一个接口两个类接口:Tag接口javax.servlet.jsp.tagext.Tag类:自关闭:TagSupport成对出现:BodyTagSupport(2)开发标签类集成自指定的类,重写setPageContext(),doStartTag(),doEndTag()。
利用JSP 2提供的SimpleTagSupport开发自定义标签( 转自: /JSP/201011/20450.htm )自定义标签库并不是 JSP 2 才出现的,JSP 1.1 版中已经增加了自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术。
通过使用自定义标签库,可以在简单的标签中封装复杂的功能。
为什么要使用自定义标签呢?主要是为了取代丑陋的 JSP 脚本。
在 HTML 页面中插入 JSP 脚本有如下几个坏处:JSP 脚本非常丑陋,难以阅读。
JSP 脚本和 HTML 代码混杂,维护成本高。
HTML 页面中嵌入 JSP 脚本,导致美工人员难以参与开发。
出于以上三点的考虑,我们需要一种可在页面中使用的标签,这种标签具有和HTML 标签类似的语法,但由可以完成 JSP 脚本的功能——这种标签就是 JSP 自定义标签。
在 JSP1.1 规范中开发自定义标签库比较复杂,JSP 2 规范简化了标签库的开发,在 JSP 2 中开发标签库只需如下几个步骤:开发自定义标签处理类;建立一个 *.tld 文件,每个 *.tld 文件对应一个标签库,每个标签库对应多个标签;在 JSP 文件中使用自定义标签。
开发自定义标签类标签库和实际开发标签库是非常重要的技术,通常来说,初学者、普通开发人员自己开发标签库的机会很少,但如果希望成为高级程序员,或者希望开发通用框架,就需要大量开发自定义标签了。
所有的 MVC 框架,如 Struts 2、SpringMVC、JSF 等都提供了丰富的自定义标签。
当我们在 JSP 页面使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发(能让美工人员更好地参与 JSP 页面的开发)。
早期 JSP 自定义标签类开发过程略微复杂一些,但 JSP 2 已经简化了这个过程,它只要自定义标签类都必须继承一个父类:,除此之外,JSP 自定义标签类还有如下要求。
JSP自定义标签(Custom Tag)V1.01 JSP自定义标签简介1.1 基本概念JSP的自定义标签是用户自定义的JSP元素。
自定义标签与JavaBean类似,都封装了Java的代码。
当JSP转换为Servlet并执行时,WEB容器便会调用这些操作。
1.2 自定义标签的功能1、取代了JSP页面的JA V A代码。
2、自定义标签是可重用的组件。
3、可通过从调用页面所传递的属性参数进行定制。
1.3 编写和调用JSP自定义标签的基本流程一个自定义标签的编写和调用包括三个流程:1、编写后台JA V A处理程序。
2、编写标签库描述文件(Tag Library Descriptor)。
3、在XML文件中进行自定义标签配置。
4、在JSP页面引用标签。
1.4 JSP自定义标签解析过程在JSP中使用标签库中的标签,都需要按照以下的方式引入标签库:当在JSP中使用了标签库中的标签,JSP页面加载时,WEB容器根据所使用标签名称前缀获取JSP页面声明taglib中的uri属性值。
然后根据所获取的uri的值在web.xml 文件中查找相对应的元素,对获取对应的标签库描述文件(WEB-INF文件夹下的.tld文件)。
根据JSP页面使用的标签的后缀从tld文件中获取相对应的属性,调用JA V A文件,创建TAG的Handler实例。
最后WEB容器调用这个实例doStartTag/doEndTag方法完成标签的处理。
2 JSP自定义标签创建和使用自定义标签功能的实现要求在后台必须有一个相关的JA V A类的支持,但并不是任意编写一个JA V A类就能处理JSP标签,这个类也必须实现指定的规范才能用于支持JSP 标签,这些规范表现形式也是接口和类,主要接口/类的描述如下:javax.servlet.jsp.tagext.Tag接口,所有处理JSP标签的类必须实现该接口。
该接口中声明了6个方法,如果直接从该接口生成类则必须实现所有的6个方法,通常不会直接通过该接口生成标签的处理类。
JSP自定义标签主要能用到的两个包javax.servlet.jsp.*;javax.servlet.jsp.tagext.*;自定义标签<userInfo:showUserInfo/>实现对用户的展现。
定义用户累User.java get set就不在赘述。
private String userName;private Integer age;private String email;public User(){erName="张三";this.email="zhangsan@";this.age=28;}创建自定义标签类UserInfoTag.javapackage com.test.tag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;import er;public class UserInfoTag extends TagSupport {private User user=new User();@Overridepublic int doStartTag() throws JspException {// TODO Auto-generated method stubJspWriter out = this.pageContext.getOut();try {if (user == null) {out.print("UserInfo Is Not Found......");return SKIP_BODY;}out.println("<table width='500px' border='1' align='center'>"); out.println("<tr>");out.println("<td width='20%'>Username:</td>");out.println("<td>" + user.getUserName() + "</td>");out.println("</tr>");out.println("<tr>");out.println("<td>Age:</td>");out.println("<td>" + user.getAge() + "</td>");out.println("</tr>");out.println("<tr>");out.println("<td>Email:</td>");out.println("<td>" + user.getEmail() + "</td>");out.println("</tr>");out.println("</table>");} catch (Exception e) {throw new JspException(e.getMessage());}return super.doStartTag();}@Overridepublic int doEndTag() throws JspException {// TODO Auto-generated method stubreturn EVAL_PAGE;}@Overridepublic void release() {// TODO Auto-generated method stubsuper.release();er=null;}public User getUser() {return user;}public void setUser(User user) {er = user;}}2在Web-Inf创建标签库描述文件.tdl(Tag Library Description)<?xml version="1.0" encoding="UTF-8"?>< taglib version="2.0" xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2eeweb-jsptaglibrary_2_0.xsd"><tlib-version>1.0</tlib-version><jsp-version>3.0</jsp-version><short-name>userInfo</short-name><uri>mytaglib</uri><tag><name>showUserInfo</name><tag-class>erInfoTag</tag-class><body-content>empty</body-content><attribute><name>user</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag>< /taglib>3 配置web.xml< jsp-config><taglib><taglib-uri>mytaglib</taglib-uri><taglib-location>/WEB-INF/mytaglib.tld</taglib-location></taglib></jsp-config>4 需要使用该标签的页面头部引入<%@ taglib uri="/mytaglib" prefix="cc"%><userInfo:showUserInfo/>我们创建的UserInfoTag类继承了TagSupport类,而它又实现了Tag接口,Tag接口的生命周期由其所在的容器控制,如下:setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性setParent() 设置此标签的父标签setAttribute() 将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get 与set方法doStartTag() 在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出doEndTag() 在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分release() 生命周期结束时调用至此,一个简单的自定义标签就实现了。