程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP與XML的結合

JSP與XML的結合

編輯:關於JSP

綜述:可擴展標注語言(eXtensible Markup Language,XML)正被迅速的運用於業界,它已作為與平台、語言和協議無關的格式描述和交換數據的廣泛應用標准。XML和它的輔助規范可用於描述數據的文檔表現,描述XML文檔類型的限制,描述XML文檔和資源之間的鏈接,描述XML文檔的自動轉換和格式化。

  如何開發自定義標簽庫?

  我使用JSP和ASP編程已經有一段頗長的時間了,在兩種服務器端的編程方式中,我越來越覺得JSP的功能要強大得多。不提別的,其中JSP的標簽庫就是我選擇JSP作為首選服務器端Web應用開發工具的原因。為什麼?因為:維護和開發的速度。在一個單一的服務器頁面中,你可以混合使用各種不同的腳本方法和對象。就?quot;混凝土"一樣,這種混合可令服務器端的腳本變得強大,並且讓服務器端的編程者設計出非常靈活和動態的Web頁面。不過這種自由的混合也有其缺點,那就是維護起來非常麻煩,特別是當項目逐漸變大時。由於最終的產品是經由一個傳統的Web設計者來維護的,因此會帶來問題。更糟糕的是,隨著代碼的復雜性增加,開發的速度就會變慢,不利於開發中等和大型的Web應用,一旦開發完,站點還要找合格的編程者來維護這些頗為復雜的代碼。
幸好,JSP提供了一個很好解決的辦法。標簽庫提供了一個簡單的方法來建立一個可重用的代碼塊。一旦標簽庫設計好,它就可以在許多項目中再次使用。更方便的是,與COM和J2EE不同,你無需學習任何其它的技巧就可以建立一個標簽庫!只要你懂得寫JSP,你就可以建立一個標簽庫。標簽庫還可以改善Web應用的維護。這個是得益於JSP頁面自定義標簽的簡單XML接口。這樣,Web設計者甚至可以做到無需知道任何JSP的知識,就可以建立JSP的Web應用。這個開放式的Web開發對於團隊運作是非常有效的。JSP編程者可以建立自定義的標簽和後台的代碼模塊,而Web設計者可以使用自定義的標簽來建立Web應用,並且將精力集中在Web設計上。

  1. 標簽庫的定義
  JSP標簽庫(也稱自定義庫)可看成是一套產生基於XML腳本的方法,它經由JavaBeans來支持。在概念上說,標簽庫是非常簡單和可以重用的代碼構造。
  執行XML/XSL轉換的標簽范例和HTML頁面

<%@ taglib uri="http://www.jspinsider.com/jspkit/JAXP" prefix="JAXP"%>
c:/xml/example.xml
c:/xml/example.xsl

  在這個例子中,通過使用簡單的標簽來訪問後台更為強大的代碼,一個XML被裝載,並且通過一個XSL文件來產生一個結果,並發送給客戶端,全部通過使用一個簡單的標簽調用就做到了。
  自定義標簽為在JSP項目中創建易於重用的代碼打開了一扇大門。你所需要的只是標簽庫和它的文檔說明。

  2. 標簽的組件
  雖然標簽庫非常易於使用,不過要建立一個內裡的設計來支持標簽庫是頗復雜的,起碼要比建立一個簡單的JavaBean復雜。這個復雜是來自於標簽庫是由幾部分構成的。不過,你只需要知道Java和JSP的知識就夠了。
一個簡單的標簽由下面的元素構成:
  ⑴ JavaBeans:為了得到Java與生具來的面向對象的好處,可重用的代碼應該放到一個獨立的代碼容器中。這些JavaBeans並不是標簽庫的一部分。不過它是你的代碼庫用來執行相關任務的基本代碼塊。
  ⑵ 標簽處理:這是標簽庫的真正核心。一個標簽處理器將引用它需要的任何資源(你的JavaBeans)和訪問你的JSP頁面的全部信息(pageContext對象)。JSP頁面也會將所有已經被設置的標簽屬性和JSP頁面上的標簽體中的內容傳送給標簽處理器。在標簽處理器處理完畢後,它將發回輸出到你的JSP頁面進行處理。
  ⑶ 標簽庫的描述(tld文件):這是一個簡單的XML文件,它記錄著標簽處理器的屬性、信息和位置。JSP容器通過這個文件來得知從哪裡及如何調用一個標簽庫。
  ⑷ 網站的web.xml文件:這是你網站的初始化文件,在這個文件中,你定義了網站中用到的自定義標簽,以及哪個tld文件用來描述每個自定義的標簽。
  ⑸ 分發文件(一個WAR或者JAR文件):如果你想重用自定義標簽的話,你需要一個方法來將它由一個項目轉移到另一個項目中。將標簽庫打包為一個JAR文件是一個簡單而且有效的方式。
  ⑹ 在你的JSP文件中作標簽庫聲明:很簡單,如果要用到該標簽的話,只要在頁面聲明一下就可以,其後,你就可以在該JSP頁面的任何地方使用它。
  看來要做的工作很多,不過其實並不是很難。它的要點並不在於編碼,而是在於如何將各部分正確地組織起來。不過,這樣的分層是很重要的,它可令標簽的使用靈活和更容易轉移。更重要的是,這些層的存在可讓處理建立標簽的工程通過一個JSP IDE(JSP的集成開發環境)自動完成。期望將來的JSP IDE可自動完成創建一個自定義標簽的大部分工作,這樣你只需要寫代碼和標簽處理就可以了。
  注意:一個標簽處理僅定義一個自定義標簽;一個標簽庫是幾個處理相同任務的標簽處理器的集合。

本新聞共4頁,當前在第1頁  1  2  3  4  


3. 建立自己的標簽
  以下將一步一步地教你如何建立自定義的標簽,具體的例子是擴展JSP,令它擁有自己的HTML編碼功能。這個功能將所有的<和>字符用HTML代碼來代替。它可以很容易地擴展為做其它的編碼處理。為了簡化,這個例子只解釋了建立自定義標簽的基本要素。
  ⑴ 創建一個JavaBean
  你代碼中任何可重新使用的部分都應該放到一個JavaBean中。這個很重要,因為你要經常在項目的其它地方用到這些代碼。放在標簽處理器中的任何代碼在標簽外都是不可以重新使用的,因此將可重用的代碼部分獨立開來是很重要的。在這個例子總,為HTML編碼的邏輯是常用的,因此放到JavaBean中。
  ⑵ HTML編碼JavaBean

/* HTML_Format.Java */
public class HTML_Format extends Object implements Java.io.Serializable {
/** 創建新的HTML_Format */
public HTML_Format() {}
/** 將一個字符串中所有的所有 < 和 > 字符用響應的HTML編碼代替 */
public String HTML_Encode(String as_data)
{
int li_len = as_data.length();
/*string buffer的長度要比原來的字符串長*/
StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10));
/* 循環替換全部的< 和 > 字符 */
for( int li_count = 0 ; li_count < li_len ; li_count++)
{ String ls_next = String.valueOf(as_data.charAt(li_count));
if (ls_next.equals("<")) ls_next = "<";
if (ls_next.equals(">")) ls_next = ">";
lsb_encode.append( ls_next );
}
return( lsb_encode.toString() );
}
}

  ⑶ 創建一個標簽處理器
  標簽處理器使用以下的代碼:

HTML編碼標簽處理器
import Java.io.IOException;
import Javax.servlet.jsp.*;
import Javax.servlet.jsp.tagext.*;
public class HTML_FormatTag extends BodyTagSupport
{
/* 1} 在標簽末將會調用這個函數 */
public int doEndTag() throws JspTagException
{
try
{ /* 2}得到標簽中的文本 */
BodyContent l_tagbody = getBodyContent();
String ls_output = "";
/* 3}如果標簽體有文本,就處理它 */
if(l_tagbody != null)
{ HTML_Format l_format = new HTML_Format();
/* 3a} 將標簽體的內容轉換為一個字符串 */
String ls_html_text = l_tagbody.getString();
ls_output = l_format.HTML_Encode(ls_html_text);
}
/* 4}將結果寫回到數據流中 */
pageContext.getOut().write(ls_output.trim());
}
catch (IOException e)
{ throw new JspTagException("Tag Error:" + e.toString());
}
/* 讓JSP繼續處理以下頁面的內容 */
return EVAL_PAGE;
}
}

  這個處理很簡單,它包括有:
  o 讀入標簽開始和結束間的文本
  o 調用html編碼函數
  o 返回結果到JSP頁面。
  ⑷ 創建一個標簽描述器
  需要描述自定義標簽以讓系統知道如何處理。該描述文件的後綴為.tld,通常它的名字和標簽處理器相同,並存放在"/WEB-INF/"目錄。

HTML編碼標簽描述器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://Java.sun.com/j2ee/dtds/we

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved