转载

JSP2.0的简单标志库扩展_SimpleTag

在jsp1.2时代已经有标记库了, 并且功能强大,但标记库的编程和调用都比较复杂,导 致真正使用到WEB开发中的还是不多。JSP2.0推出的简单标记库扩展解决了以上的问题。 简单标记库相对JSP1.2中的标记库来说,优点在于: 对后台程序员来说:结构更简单,实现接口更少,可以轻松实现后台程序

JSP 2.0中加入了新的创建自制标记的API:javax.servlet.jsp.tagext.SimpleTag,该 API定义了用来实现简单标记的接口。和JSP 1.2中的已有接口不同的是,SimpleTag接口 不使用doStartTag()和doEndTag()方法,而提供了一个简单的doTag()方法。这个方法在 调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对 标记体的评估等都在这个方法中实现。从这个方面来讲,SimpleTag可以和IterationTa g达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来 设置JSP内容的setJspBody()和getJspBody()方法。Web容器会使用setJspBody()方法定 义一个代表JSP内容的JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中 根据需要多次调用getJspBody().invoke()方法以处理JSP内容。 对于前台WEB页面制作人员:在JSP1.2时代,Taglib页面调用实际上是比较复杂的,Simpl eTag+EL表达式语言极大的简化了Taglib调用,真正达到不懂JAVA的人员也可以轻松编写 JSP页面的目的。

一个Taglib页面的编写和调用包括三个流程:

1. 后台程序员编写要被调用的程序

简单标志扩展实现示例:

java程序 RepeatSimpleTag.java://放到WEB-INF/classes/jsp2/examples/simpletag 下面 package jsp2.examples.simpletag;

  1. package jsp2.examples.simpletag;  
  2.  
  3. import javax.servlet.jsp.JspException;   
  4. import javax.servlet.jsp.tagext.SimpleTagSupport;   
  5. import java.util.HashMap;   
  6. import java.io.IOException;  
  7.  
  8. public class RepeatSimpleTag extends SimpleTagSupport {  
  9.  
  10. private int num;  
  11.  
  12. public void doTag() throws JspException, IOException {   
  13. for (int i=0; i<num; i++) {   
  14. getJspContext().setAttribute("count",   
  15. String.valueOf( i + 1 ) );   
  16. getJspBody().invoke(null);   
  17. }   
  18. }  
  19.  
  20. public void setNum(int num) {   
  21. //这个用来设置num的值,这个方法将在tld文件中调用   
  22. this.num = num;   
  23. }   
  24. }   

----------------------------

2. 编辑Tag标志描述文件,这个文件要放在WEB-INFjsp2下面,并且这个文件要以tld为 文件结尾。

repeatTaglib.tld (标志库描述文件,放在WEB-INF下面的jsp2下面)

  1. < ?xml version="1.0" encoding="UTF-8" ?>   
  2. < taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org   
  3. /2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2e   
  4. e web-jsptaglibrary_2_0.xsd" version="2.0">   
  5. < description>A tag library exercising SimpleTag handlers.< /description>   
  6. < tlib-version>1.0< /tlib-version>   
  7. < short-name>SimpleTagLibrary< /short-name>   
  8. < uri>/SimpleTagLibrary< /uri>   
  9. < tag> < !--这里是开始标志描述-->   
  10. < name>repeat< /name> < !--这里设定的标志名称,供jsp文件调用-->   
  11. < tag-class>jsp2.examples.simpletag.RepeatSimpleTag< /tag-class>   
  12. < !--对应的java文件路径-->   
  13. < body-content>scriptless< /body-content>   
  14. < variable> < !--设置要获取的变量返回值-->   
  15. < description>Current invocation count (1 to num)< /descri   
  16. ption>   
  17. < name-given>count< /name-given>   
  18. < /variable>   
  19. < attribute> < !--设置java类中变量,调用java文件中的setNum()方法-->   
  20. < name>num< /name>   
  21. < required>true< /required>   
  22. < rtexprvalue>true< /rtexprvalue>   
  23. < /attribute>   
  24. < /tag> < !--//这里是结束标志描述-->   
  25. < /taglib>   

----------------------------

3.JSP页面人员就可以直接调用了。

  1. < %@ taglib prefix="repeattag" uri="/WEB-INF/jsp2/repeatTaglib.tld" %>   
  2. < html>   
  3. < body>   
  4. < br>   
  5. < repeattag:repeat num="5">//向标记库文件中的repeat标记付值   
  6. 获得返回值{count} of 5< br>//得到返回结果(java程序中实现了循环)   
  7. < /repeattag:repeat>   
  8. < /body>   
  9. < /html>   

看这么简单就可以得到想要的结果,方便吧。

----------------------------

使用标签文件(JSP fragment): 使用简单标签扩展机制的另一种简单的方法是通过标签文件。 标签文件是一种资源文件,网页作者可以利用它抽取一段JSP代码,通过定制功能来实现 代码的复用。换句话说,标签文件允许JSP网页作者使用JSP语法创建可复用的标签库。 标签文件的扩展名必须是“.tag”。表面上标签文件文件和jsp1.2中的jsp:include 指 令中的包含文件好像是一样的,但实际上还是有一些不同的,标签文件一般功能比较短小 简单而且重复使用率高的一些代码。

----------------------------

一个简单的标签文件 SimpleTag.tag 这个文件放到WEB-INF/tags下面

  1. < h4>hello,welcome to here ,here is a simple tag Example< /h4>   
  2. char.jsp   
  3. < %@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>   
  4. < HTML>   
  5. < BODY>   
  6. < H2>Tag File Example< /H2>   
  7. < P>< B>The output of my first tag file is< /B>< tags:SimpleTag/>   
  8. < /BODY>   
  9. < /HTML> 

如果其他JSP页面中还要使用这个标签文件,同样也可以实现这调用这个标志库文件,达到 简单的代码复用的目的。

----------------------------

标签文件(JSP fragment)的基本特点是可以使处理JSP的容器推迟评估JSP标记属性。我 们知道一般JSP是首先评估JSP标记的属性,然后在处理JSP标记时使用这些属性,而JSP fragment提供了动态的属性。也就是说,这些属性在JSP处理其标记体时是可以被改变 的。标签文件是用文本文件格式(JSP语法)实现自制标记,这也是JSP2.0的一个主要新功能。

----------------------------

标签文件的动态复用 标签文件可以作为模板使用。指令attribute类似于TLD中的< attribute>元素,允许声明 自定义的动作属性。

  1. < %@ attribute name="color" %>   
  2. < %@ attribute name="bgcolor" %>   
  3. < %@ attribute name="title" %>   
  4. < TABLE border="0" bgcolor="${color}">   
  5. < TR> < TD>< B>${title}< /B>< /TD> < /TR>   
  6. < TR> < TD bgcolor="${bgcolor}"> < jsp:doBody/> < /TD> < /TR>   
  7. < /TABLE>   
  8. 以下是调用这个Tag文件的jsp文件   
  9. < %@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>   
  10. < HTML>< BODY>   
  11. < TABLE border="0">   
  12. < TR valign="top">   
  13. < TD>   
  14. < tags:display color="#ff0000" bgcolor="#ffc0c0" title="Travel"> Last French   
  15. Concorde Arrives in NY   
  16. Another Travel Headline   
  17. Yet Another Travel Headline   
  18. < /tags:display>   
  19. < /TD>   
  20. < TD> < tags:display color="#00fc00" bgcolor="#c0ffc0" title="Technology"> Jav   
  21. a for in-flight entertainment   
  22. Another Technology Headline   
  23. Another Technology Headline   
  24. < /tags:display>   
  25. < /TD>   
  26. < TD> < tags:display color="#ffcc11" bgcolor="#ffffcc" title="Sports"> America   
  27. n Football NBA Soccer   
  28. < /tags:display>   
  29. < /TD>   
  30. < /TR>   
  31. < /TABLE> < /BODY> < /HTML> 

每次设定 Tag文件中的相关的属性,而Tag标志文件则根据设定的属性显示相应的结果。可以说在JSP2.0中使用标签库是大大的方便了。

正文到此结束
Loading...