<%@ page contentType="text/html; charset=gb2312"%> 编写 "纯HTML" jsp应用--学会使用 JSTL
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
编写 "纯HTML" jsp应用--学会使用 JSTL
     发布者: 发布时间:2006-05-07


到了后来才知道---这是一种极其愚蠢的做法儿----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,觉得这个东东真的很不错!很想让更多的 初学者 知道这个,并能应用到实际的web开发中。
下面,就开始编写我们的第一个 Tag!

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

<%@ page contentType="text/html;charset=gb2312" %>
<html><body>
<%@taglib uri="/tags" prefix="visa"%>
现在时间是:<visa:date/>
</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中方便调用。
package tag;

import java.util.Date;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class datetag extends TagSupport{

public int doStartTag() throws JspException{
Date dte=new Date();
try{
JspWriter out=pageContext.getOut();
out.print(dte);
}
catch(java.io.IOException e)
{throw new JspTagException(e.getMessage());}
return SKIP_BODY;
}
}
用 javac编译之后,就得到了 datetag.class文件了,将其放在 xxx\WEB-INF\classes\tag 目录下。

2-编写tag库描述符:tags.tld
比较容易看出,<tag></tag>部分有点象servlet mapping的配置--这里配置的是tag的名字与tag类之间的映射。

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>

<tag>
<name>date</name>
<tag-class>tag.datetag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
将tags.tld保存在xxx\WEB-INF\ 目录下。

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

<taglib-uri>/tags</taglib-uri>
<taglib-location>/WEB-INF/tags.tld</taglib-location>

</taglib>

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

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


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

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

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

****
这只是一个很简单的应用,当然,你会有很多的“迷惑点”,这是正常的---在TAG中有一些独有的特性,想完全学会TAG并不是件简单的事情。
--所以,在这里,我向大家推荐一本好书:电子工业出版社的《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 以上的版本,好象没这个要求)---否则,会提示编译错误。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
tomcat 中 /servlet url 映射
jsp如何连接数据库!
spring,ioc模式与ejb3调用
上个项目中写的Ant build文件
用WebWork、JSP、Velocity建立注册页面
JSP的基本环境配置
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(4692)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(8692)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(6703)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(8404)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(3448)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(3958)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号