[學習筆記]**編寫 純HTML jsp應用--學會使用

來源:互聯網
上載者:User
js|筆記 剛開始用JSP做web應用的時候,象使用PHP,ASP一樣用JSP,在HTML代碼中夾雜著一大堆的 scriptlet---即java 程式碼片段。由於本人的“排版”技術還算可以,開始的時候覺得挺好,編寫“效率”高,調試又方便!

到了後來才知道---這是一種極其愚蠢的做法兒----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 以上的版本,好象沒這個要求)---否則,會提示編譯錯誤。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.