`
zzg
  • 浏览: 123934 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

jsp标签库

    博客分类:
  • jsp
阅读更多
1)提供属性的set方法,此后这个属性就可以在jsp页面设置。以jstl标签为例 <c:out value=""/>,这个value就是jsp数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。例如

setValue(String data){this.data = data;}

这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。

2)处理 doStartTag 或 doEndTag 。这两个方法是 TagSupport提供的。 还是以<c:out value=""/>为例,当jsp解析这个标签的时候,在“<”处触发 doStartTag 事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。

3)编写tld文件。

4)在jsp页面导入tld




1.编写标签处理程序

OutputTag
java 代码
 
  1. package diegoyun;  
  2. import javax.servlet.jsp.JspException;  
  3. import javax.servlet.jsp.JspWriter;  
  4. import javax.servlet.jsp.tagext.TagSupport;  
  5. /** 
  6. * @author chenys 
  7. */  
  8. public class OutputTag extends TagSupport  
  9. {  
  10. private String name=null;  
  11. public void setName(String name)  
  12. {  
  13. this.name = name;  
  14. }  
  15. public int doStartTag() throws JspException{  
  16. try  
  17. {  
  18. JspWriter out = pageContext.getOut();  
  19. out.print("Hello! " + name);  
  20. }  
  21. catch (Exception e)  
  22. {  
  23. throw new JspException(e);  
  24. }  
  25. //表示tag已处理完毕,返回jsp页面。还有几个值,例如 EVAL_BODY_AGAIN 和EVAL_BODY_INCLUDE等  
  26. return EVAL_PAGE;  
  27. }  
  28. }  


2.编写tld文档
    short-name:taglib的名称,也称为前缀。比如<c:out value=""/> 里的“c”

name:tag的名字。例如<c:out value=""/> 里的"out”,我们的类也取名为out,由于有前缀作区分,不会混淆

tag-class:具体的tag类。带包名

body-content:指tag之间的内容。例如<c:out value=""> ...... </c> 起始和关闭标签之间就是body-content。由于没有处理body-content,所以上面设为empty

<attribute>里的name:属性名字。例如<c:out value=""/>里的value。名字可任意取,只要类里提供相应的set方法即可。

required:是否必填属性。

rtexprvalue:是否支持运行时表达式取值。这是tag的强大功能。
    
    RunTime EXPRession VALUE
    true代表,<xxx:yyyy zzz="&lt;%= something %&gt;">
    标签库zzz的属性是<%= %>表达式的结果而非"<%= something %>"这几个字母


</xxx:yyyy>
xml 代码
 
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE taglib  
  3. PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
  4. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  5. <taglib>  
  6. <tlib-version>1.0</tlib-version>  
  7. <jsp-version>1.2</jsp-version>  
  8. <short-name>c</short-name>  
  9. <!--OutputTag-->  
  10. <tag>  
  11. <name>out</name>  
  12. <tag-class>diegoyun.OutputTag</tag-class>  
  13. <body-content>empty</body-content>  
  14. <attribute>  
  15. <name>name</name>  
  16. <required>false</required>  
  17. <rtexprvalue>false</rtexprvalue>  
  18. </attribute>  
  19. </tag>  
  20. </taglib>  



3.TagSupport和body区别
    TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport。

     交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。

    用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport。

如果tag处理类与body交互,那tag处理类应实现BodyTag接口或从BodyTagSupport中派生。这种tag处理类一般要实现doInitBody和doAfterBody方法。

Body允许一些方法来读写它的内容。Tag处理类可以调用body内容的getString或getReader方法来从body中提取信息,也可用  writeOut(out) 方法来将body的内容写入到out对象中。其中out对象通过tag处理类的getPreviousOut方法来获得。

如果body的内容需要被计算,那么doStartTag方法必须返回EVAL_BODY_BUFFERED,否则,它将返回 SKIP_BODY。

doInitBody 方法

此方法在body内容已经设好,但未被计算之前被调用。你可以根据不同的body内容来制定初始化策略。

doAfterBody方法

此方法在body内容已被计算后进行调用。

和doStartTag方法一样,doAfterBody方法返回一个指示符指示是否要继续计算body,如果要继续计算,则doAfterBody应返回EVAL_BODY_BUFFERED,否则,它应返回SKIP_BODY。

release 方法

tag处理类调用此方法将它的状态重置为初始状态,并释放所有的私有资源。


以下的例子读取body的内容(其中含有一条sql语句),然后将它传递给一个对象,让它进行查询。由于此处body不须重新计算,所以doAfterBody会返回SKIP_BODY。

  
java 代码
 
  1. 1. Public class QueryTag extends BodyTagSupport  
  2.    2.  
  3.    3. {  
  4.    4.  
  5.    5public int doAfterBody() throws JspTagException  
  6.    6.  
  7.    7. {  
  8.    8.  
  9.    9. BodyContent bc = getBodyContent();  
  10.   10.  
  11.   11//将body的内容以字符串的格式提取出来  
  12.   12.  
  13.   13. String query = bc.getString();  
  14.   14.  
  15.   15//清除body  
  16.   16.  
  17.   17. bc.clearBody();  
  18.   18.  
  19.   19try{  
  20.   20.  
  21.   21. Statement stmt = connection.createStatement();  
  22.   22.  
  23.   23. Result result = stmt.executeQuery(query);  
  24.   24.  
  25.   25. }catch(SQLException e){  
  26.   26.  
  27.   27throw new JspTagException(“queryTag: “ + e.getMessage() );  
  28.   28.  
  29.   29return SKIP_BODY;  
  30.   30.  
  31.   31. }  
  32.   32.  
  33.   33. }   


4.doStartTag(),doEndTag()

   doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与  SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页

    doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。

   预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.

  如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:

   doStartTag() ->不显示文字 ->doEndTag()->执行接下来的网页

  如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是

   doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页


5.

EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用

EVAL_PAGE:继续处理页面,doEndTag()函数可用

SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用

SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用

EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED和EVAL_BODY_AGAIN取代 ,三者值是一样的,但后二者的名称意义更明确

EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法

EVAL_BODY_AGAIN:请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag的时候是很有用的。
分享到:
评论

相关推荐

    jsp标签库jar

    **JSP标签库(JSP Tag Libraries)与JSTL** JSP标签库是JavaServer Pages技术的一个重要组成部分,它允许开发者使用预定义的标签来增强HTML或XML文档的可读性和可维护性。这些标签通常封装了复杂的业务逻辑或者常见...

    JSP标签库和JSTL

    JSP标签库和JSTL ppt学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    基于java的开发源码-Google地图JSP标签库.zip

    基于java的开发源码-Google地图JSP标签库.zip 基于java的开发源码-Google地图JSP标签库.zip 基于java的开发源码-Google地图JSP标签库.zip 基于java的开发源码-Google地图JSP标签库.zip 基于java的开发源码-Google...

    JSP标签库

    【JSP标签库详解】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发工具,它允许开发者在HTML代码中嵌入Java代码,以实现动态网页的生成。JSP标签库是JSP技术的一个重要组成部分,极大地提升了开发效率和...

    JSP标签库,ppt

    【JSP标签库】是JavaServer Pages (JSP) 技术中的一种重要特性,它允许开发者创建可重用的自定义标签,从而简化页面逻辑的编写。标签库的概念是基于XML脚本,通过JavaBeans组件支持。这些标签库不仅提高了代码的...

    JSP标签库编程--简单标签库

    首先,我们要理解什么是JSP标签库。JSP标签库是预定义的一组自定义标签,它们可以扩展HTML或XML文档的功能。这些标签由TLD(Tag Library Descriptor)文件定义,并通过JSP页面引用。标签库可以是开源的,如Apache ...

    Google地图JSP标签库

    Google地图JSP标签库是为了简化这个过程,它为开发者提供了预定义的JSP标签,使得在JSP页面上操作和展示Google地图变得更加便捷。这个标签库通常包括一系列与地图相关的功能,如加载地图、设置地图中心点、添加标记...

    JSP 标签库

    JSP标签库,很好的文档,值得下载和参考。文档里有具体的描述。

    jsp标签库简介

    **JSP标签库简介** JSP(JavaServer Pages)是一种基于Java的技术,用于创建动态网页。为了简化JSP页面的编写,Sun公司推出了JSP标准标签库(JSTL),这是一个标准化的标签库,旨在提高开发效率,降低代码的复杂性...

    jsp中标签库的使用

    JSP标签库是由一组相关标签组成的集合,这些标签可以实现特定的功能,如数据处理、用户界面展示等。它们是基于Java的,通常以`.tld`(Tag Library Descriptor)文件的形式存在,用于描述标签的属性、事件和行为。 ...

    Google地图JSP标签库.7z

    Google地图JSP标签库是专为Java Server Pages (JSP) 设计的一个便捷工具,旨在简化在JSP页面中操作和展示Google地图的过程。这个7z压缩包文件包含了实现这一功能所需的资源和文档。 JSP(Java Server Pages)是Java...

    基于Java的Google地图JSP标签库.zip

    在Java开发中,Google地图JSP标签库是一个非常实用的工具,它允许开发者在JSP页面上方便地集成和操作Google Maps API。这个压缩包"基于Java的Google地图JSP标签库.zip"包含了实现这一功能所需的各类文件和资源。下面...

    jstl一个开源的JSP标签库

    JSTL,全称为JavaServer Pages Standard Tag Library,是一个开源的JSP标签库,由Apache软件基金会的Jakarta项目开发。这个库提供了一系列预定义的标签,用于简化JSP页面中的业务逻辑处理,使代码更加简洁、可读性强...

    01-31.JSP标签库开发.doc

    JSP标签库开发是JSP应用程序中一种强大的工具,它允许开发者创建自定义标签来替代传统的脚本元素(Scriplet),以提高代码的可读性和可维护性。在JSP的MVC设计模式下,标签库尤其受到推崇,因为它有助于保持页面内容...

    基于Java的实例源码-Google地图JSP标签库.zip

    在本资源"基于Java的实例源码-Google地图JSP标签库.zip"中,我们可以深入探讨几个关键的IT知识点,主要集中在Java编程、JSP(JavaServer Pages)技术和Google地图API的应用。 首先,Java是一种广泛使用的面向对象的...

    java源码:Google地图JSP标签库.zip

    Java源码:Google地图JSP标签库.zip是一个包含用于在JSP页面中集成Google地图功能的源代码包。这个库使开发人员能够更方便地在Java服务器页面中嵌入交互式地图,提供了一种优雅的方式来处理地图显示、定位、标记和...

    基于java的Google地图JSP标签库.zip

    【标题】"基于Java的Google地图JSP标签库"是一个专为Java开发人员设计的工具,它使得在JSP(JavaServer Pages)中集成和操作Google地图变得更加简单。这个库通常包含一系列预定义的JSP标签,允许开发者通过XML-like...

    (JSTL)jsp标签库

    JSTL是由Apache Jakarta项目提供和支持的一个开放源代码的JSP标签库,它只支持JSP 1.2及以上版本和Servlet 2.3及以上版本,例如Tomcat 4.x及更高版本。JSTL的目标是提供一套标准的、可复用的JSP标签,以简化Web应用...

Global site tag (gtag.js) - Google Analytics