一個開發人員眼中的JSP技術(下)

來源:互聯網
上載者:User

使用定製化的標籤
  儘管你可以在JSP頁面中植入Java代碼並在伺服器方執行,但是,JSP也支援使用定製標籤來插入動態內容,它有一種機制可以讓你在JSP頁面中插入你自己的、與HTML類似的標籤。換句話說,你的JSP網頁能夠使用插入Java代碼的簡單標籤文法產生動態內容。但定製標籤的用處不是很大。

  建立一個定製標籤比在JSP網頁中使用簡單的scriptlet要複雜得多,因為定製標籤需要用幾個步驟來把你的Java組件和JSP代碼串連起來。不過,定製標籤在分發和重複使用的時候就非常簡單了。對定製標籤的支援將在JSP建立工具中實現。

  在下面的例子中產生動態內容的JSP網頁就使用了定製標籤。注意,在這個例子中我們不再需要引入Java類、聲明變數或寫任何Java代碼:

  

  

  
Today's Menu

  

Lunch

  

  

Our Special of the Day

  < meal="lunch" insertcatchofday>

  

  從上面的語句中我們可以看出,這個頁面明顯比前面的scriptlet例子要簡單許多,因為它沒有包含初始化對象和執行相應的方法。但是JSP網頁代碼僅僅只是一部分;對於每一個定製標籤,還包括下面的三個組件:

  (1)包含定製標籤的網頁,比如說,上面的代碼片斷中就使用了insertCatchOfDay 的定製標籤。在使用定製標籤之前,頁面必須指定Taglib Directive來提供標籤庫描述符(對標籤定義)的位置。當執行定製標籤的時候,網頁還有代表性的定義了一個和多個標籤屬性(比如在這個例子中的“meal”)來確定動態內容。

  (2)標籤庫描述符。它是一個定義了定製化標籤並把它和Tag Handler串連起來的XML檔案。一個標籤庫描述符包含了標籤的不同屬性,相關Tag Handler的名稱(位置)以及JSP引擎需要處理定製標籤的其他資訊。

  (2)Tag Handler。 它是一個與定製標籤聯合執行操作的Java類。例如,在上面的insertCatchOfDay標籤中,Tag Handler就是執行資料庫查詢得到相應功能表項目的Java類。

  我們已經看到了一個使用定製標籤的JSP網頁,下面讓我們來看一看另外的兩個組件。

  Tag Handler

  tag handler是一個與servlet比較相似的Java類。但是servlet能夠執行Servlet介面,還能夠被HTML GET或POST請求所執行。tag handler也能夠執行一個標籤介面(javax.servlet.jsp.Tag)以及在定製標籤被JSP引擎處理的時候執行。

  如果定製標籤包含了屬性,那麼tag handler就必須定義這些屬性以及每一個的get/set方法。例如,當定義上面insertCatchOfDay定製標籤的tag handler的時候,我們必須定義“meal”屬性和與它相關的get和set 方法:

  private String meal = null;

  public void setMeal(String s) {

  meal = s;

  }

  public String getMeal() {

  return meal;

  }

  Tag Library Descriptor

  如果你所有的時間都在處理Java技術而不知道關於 XML方面的東西,那麼標籤庫描述符組件可能看起來會比較陌生。但是你也不需要擔心,因為你不需要學習一門新的程式設計語言。標籤庫描述符僅僅使用與HTML相似的標籤文法來定義定製標籤的名字和屬性,這更象定義一個對象。

  下面的標籤庫描述符定義了insertCatchOfDay標籤。注意,這個檔案定義了定製標籤的名稱,屬性和相關的Tag Handler類:

   xml version="1.0" ?>

  

  

  insertCatchOfDay

  com.sun.CatchOfDayHandler

  

  Queries menu database for the catch of the day。

  

  

  meal

  

  

  

  與定義屬性的名稱一樣,標籤庫描述符也能夠定義資料類型並指定其屬性(無論是否需要);在Tag Handler被執行之前,它允許JSP引擎去做某些錯誤檢查。還有其他的資訊,比如說為了使用JSP建立工具,庫名和版本號碼也可以包含在標籤庫中。

更多的例子
  在下面的例子中,第一個例子在JSP頁面中使用了HTTP請求對象 (HttpServletRequest) 來判斷使用者瀏覽器的版本並從三個HTML頁面中的一個中返回相應的內容:

  

  

  

  

  

  
  agent = request.getHeader("User-Agent");

  if ( agent.startsWith("Mozilla/4.0") {

  %>

  

  

  
  }

  else if ( agent.startsWith("Mozilla/3.0") {

  %>

  

  

  
  }

  else {

  %>

  

  

  
  }

  %>

  

  

  注意:此頁面無須聲明或初始化HTTP請求對象就可以直接對它進行訪問。請求和響應(HttpServletResponse)對象都能夠隱含地在JSP 頁面中使用。和servlet一樣,JSP頁面能夠使用請求對象從HTML表單中獲得參數值。

  

  

  

  

  

  

  

  

Here are your current selections:

  
  

  selections = request.getParameterValues("items");

  if (selections != null) {

  %>

      
      for(int x = 0; x
      %>

  •    :

      
      }

      %>

  }

  else {

  %>

  

(no items selected)

  
  }

  %>

  

  

  

  

  在這個例子中,當每一個參數值都被讀取以後,JavaBean組件便查詢所需要的資訊。在JSP網頁中使用Bean這種方法可以容易地從資料庫中返回動態web內容。

結論
  如果你正在尋找一種能簡便建立串連伺服器方Java組件的web程式的方法,那麼JavaServer Page正是你所需要的。除了EJB,RMI,JDBC和JavaBean外,分離HTML表述代碼和web程式,也使得JSP網頁組織起來運行變得更容易了。事實上,由於web設計人員幾乎無須Java開發人員的協助就可以建立JSP頁面,所以你再也不同擔心建立web網頁和寫HTML代碼了。

  <全文完>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.