转载

充分使用标签功能编写JSP应用(JSTL)

刚开始用JSP做web应用的时候,象使用PHP,ASP一样用JSP,在HTML代码中夹杂着一大堆的 scriptlet。即java 代码段。由于本人的“排版”技术还算可以,开始的时候觉得这种JSP应用挺好,编写“效率”高,调试又方便!

到了后来才知道,这是一种极其愚蠢的做法。JSP诞生的时候就已经明确与ASP,PHP划清了界限,使用javaBean、Servlet可以有效的将HTML中夹杂的java 代码段剥离,然后包装成一个可在多个页面复用的“逻辑处理组件”。这是JSP相对于PHP,ASP的优越之处之一。

但有时即使使用javabean + servlet,我们也不得不将“极少量”的 java代码 嵌入到HTML中----的确,有时你必须这样:因为在 javabean中,你无法使用JSP中的隐含对象,比如 request,session,response等.

使用Servlet虽然可以使用JSP的对象,但却不能象javaBean灵活地插入到 html 中。

所以,Tag(标签) 就出现了(可以使用所有的JSP隐含对象),它的出现彻底解决了这个问题,可以让你编写出“纯HTML”的JSP页码---由此带来的好处自然不言而喻:更高的可维护性、更高的组件复用效率、更易维护的HTML页面。

小弟不才,刚刚开始学JSTL,觉得这个东东真的很不错!很想让更多的 初学者 知道这个,并能应用到实际的JSP应用开发中。
下面,就开始编写我们的第一个 Tag!

**下面是使用了简单Tag的JSP文件,运行结果是显示当前时间:

  1. < %@ page contentType="text/html;charset=gb2312" %> 
  2. < html>< body> 
  3. < %@taglib uri="/tags" prefix="visa"%> 
  4. 现在时间是:< visa:date/> 
  5. < /body>< /html> 

很明显,使用了tag的JSP页清爽了许多---如果将数据库操作等一些复杂功能也封装进去的话,tag的优势就更明显了!

**环境:win2000 server + Tomcat5.019 + j2sdk1.42 + SQLServer 2k
**开发一个Tag,需要编写2个主要文件:
1-标签处理器(一个类servlet的java类)
2-标签描述符(一个XML风格的tld文件)
完成这两个文件,就可以在WEB应用中部署、应用了。

好了,下面我们就开始做吧!

1-编写tag处理器:datetag.java

它的作用就象一个Servlet,接受来自客户端的请求,但它却可以象javaBean一样在JSP中方便调用。

  1. package tag;  
  2.  
  3. import java.util.Date;  
  4. import javax.servlet.jsp.*;  
  5. import javax.servlet.jsp.tagext.*;  
  6.  
  7. public class datetag extends TagSupport{  
  8.  
  9.  public int doStartTag() throws JspException{  
  10.   Date dte=new Date();  
  11.   try{  
  12.   JspWriter out=pageContext.getOut();  
  13.   out.print(dte);  
  14.    }  
  15.    catch(java.io.IOException e)  
  16.    {throw new JspTagException(e.getMessage());}  
  17.  return SKIP_BODY;  
  18. }  
  19. }  

用 javac编译之后,就得到了 datetag.class文件了,将其放在 xxx/WEB-INF/classes/tag 目录下。

2-编写tag库描述符:tags.tld

比较容易看出,< tag>< /tag>部分有点象servlet mapping的配置--这里配置的是tag的名字与tag类之间的映射。

  1. < ?xml version="1.0" encoding="ISO-8859-1"?> 
  2. < taglib> 
  3. < tlib-version>1.0< /tlib-version> 
  4. < jsp-version>1.2< /jsp-version> 
  5.  
  6. < tag> 
  7.  < name>date< /name> 
  8.  < tag-class>tag.datetag< /tag-class> 
  9.  < body-content>empty< /body-content> 
  10. < /tag> 
  11. < /taglib> 
  12.  

将tags.tld保存在xxx/WEB-INF/ 目录下。

3-配置你的web.xml:

配置web.xml,注册你的标签库:在web.xml的 < web-app>与< /web-app>之间添加:
在这里注册你的自定义标签符,在JSP中的引用名为:/tags

  1. < taglib> 
  2.  
  3. < taglib-uri>/tags< /taglib-uri> 
  4. < taglib-location>/WEB-INF/tags.tld< /taglib-location> 
  5.  
  6. < /taglib> 

4-开始在JSP应用中使用!

因为已经在web.xml中注册过,通过 /tags 引用你的标签库;
prefix的作用就象< jsp:useBean/>中的 id,只是作为一个标志(可任意定义)
< visa:date/> 很明显,通过调用date,就等于调用了 datetag.class :

  1. < %@ page contentType="text/html;charset=gb2312" %> 
  2. < html>< body> 
  3. < %@taglib uri="/tags" prefix="visa"%> 
  4. 现在时间是:< visa:date/> 
  5. < /body>< /html> 

**相信到了这里,有人就有了疑问了:为了使用一个Tag,我就做了这么多的“多余”工作(编写tld,修改web.xml,还要重启tomcat),值得吗?!

---答案是:这是很值得的!

1、如果将比较复杂的逻辑功能封装进Tag,它就具有比Servlet,javaBean更高的灵活性,更多的优点,更易扩展,更易维护---彻底分离表示层与逻辑层!

2、因为Tag的功能并非只是这一些,还有更多高级功能---值得去学习!

****

这只是一个很简单的应用,当然,你会有很多的“迷惑点”,这是正常的---在TAG中有一些独有的特性,想完全学会TAG并不是件简单的事情,但对于JSP应用开发而言这终究会节省很多的工夫。

--所以,在这里,我向大家推荐一本好书:电子工业出版社的《jsp标志库编程指南》(英文名:《Professional JSP Tag Libraries》)

PS:使用JSTL配合javabean,servlet还可以有效保护你的源码哦 ---- 因为,你可以向你的客户交付不含有java源代码的web应用,因为,所有的 java代码 都已经被编译成 *.class了   *^_^*

[注意]:针对 Tomcat 5.0x以下的版本----如:Tomcat 4.0x:要编译标签处理器,必须将你的 servlet.jar(在% TOMCAT_HOME%/common/lib下面) 放进环境变量 CLASSPATH 中---(如果是 tomcat5.0x 以上的版本,好象没这个要求)---否则,会提示编译错误。

正文到此结束
Loading...