久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一個開發(fā)人員眼中的JSP技術(shù)

 duduwolf 2005-09-24
JavaServerTM Pages(JSP)技術(shù)為我們提供了一種建立動態(tài)網(wǎng)頁的簡單方法,,而且也簡化了構(gòu)造web程序的工作,。本文從一個開發(fā)人員的角度對JSP技術(shù)做了一個全面介紹(并提供了一些JSP實例程序)。
前言
JavaServer Pages技術(shù)可以讓web開發(fā)人員和設(shè)計人員非常容易的創(chuàng)建和維護動態(tài)網(wǎng)頁,,特別是目前的商業(yè)系統(tǒng),。作為JavaTM技術(shù)的一部分,JSP能夠快速開發(fā)出基于web,、獨立于平臺的應(yīng)用程序,。JSP 把用戶界面從系統(tǒng)內(nèi)容中分離開來,使得設(shè)計人員能夠在不改變底層動態(tài)內(nèi)容的前提下改變整個網(wǎng)頁布局,。
那么什么是JavaServer Page呢?簡單的說,,一個JSP網(wǎng)頁就是在HTML網(wǎng)頁中包含了能夠生成動態(tài)內(nèi)容的可執(zhí)行應(yīng)用程序代碼。此應(yīng)用程序可能包含JavaBeanTM,,JDBCTM對象,,Enterprise Java BeanTM (EJB)和Remote Method Invocation (RMI)對象,所有的部分都可以非常容易的從JSP網(wǎng)頁上訪問到,。例如,,一個JSP網(wǎng)頁可以包含 HTML代碼所顯示的靜態(tài)文本和圖像,也可以調(diào)用一個JDBC對象來訪問數(shù)據(jù)庫,;當網(wǎng)頁顯示到用戶界面上以后,,它將包含靜態(tài)HTML內(nèi)容和從數(shù)據(jù)庫中找到相應(yīng)的動態(tài)信息。
  在JSP網(wǎng)頁中,,要把用戶界面和應(yīng)用程序分開可以考慮在網(wǎng)頁設(shè)計人員和開發(fā)人員之間執(zhí)行一個非常方便的授權(quán)任務(wù),。它也允許開發(fā)人員去建立靈活的代碼,從而非常容易的進行更新和重復利用,。由于JSP網(wǎng)頁能夠根據(jù)需要自動進行編譯,,web設(shè)計人員無須重新編譯應(yīng)用程序邏輯就可以改變表述代碼。這也使得JSP與Java servlet(它是JavaSever Pages功能的擴展)相比成為一種可以更靈活生成動態(tài)web內(nèi)容的方法,。

JSP和Servlet
  如果你已經(jīng)用過Java servlet,,那么你就會知道servlet可以讓你建立動態(tài)生成的網(wǎng)頁,而網(wǎng)頁中包含有從服務(wù)器方的Java對象中所獲得的數(shù)據(jù),。但是你也得知道servlet 生成網(wǎng)頁的方法就是在Java類中嵌入HTML標簽和表述代碼,。這就意味著改變表述代碼需要修改和重新編譯servlet源文件。因為設(shè)計HTML頁面的設(shè)計人員可能與編寫servlet代碼的開發(fā)人員不是同一個人,,更新基于servlet的web應(yīng)用程序就成了一件非常棘手的事情,。

  Enter JavaServer Page是Servlet API的一個擴展。事實上,,JSP網(wǎng)頁在編譯成servlet之前也可以使用,,所以它們也具有servlet的所有優(yōu)勢,,包括訪問Java API。由于JSP 是嵌入到servlet中關(guān)于應(yīng)用程序的一般表述代碼,,所以他們能夠被看成一種“徹底”的servlet,。

  JSP網(wǎng)頁主要提供了一種建立servlet的高水平方法,它還帶來了其他的優(yōu)點,。即使你已經(jīng)為web應(yīng)用程序編寫了servlet,,使用JSP仍然有很多優(yōu)勢:

  JSP網(wǎng)頁可以非常容易的與靜態(tài)模板結(jié)合,包括HTML 或XML 片段,,以及生成動態(tài)內(nèi)容的代碼,。

  JSP網(wǎng)頁可以在被請求的時候動態(tài)的編譯成servlet,所以網(wǎng)頁的設(shè)計人員可以非常容易的對表述代碼進行更新,。如果需要的話,,JSP網(wǎng)頁還可以進行預(yù)編譯。

  為了調(diào)用JavaBean組件,,JSP標簽可以完全管理這些組件,,避免網(wǎng)頁設(shè)計人員復雜化應(yīng)用程序。

  開發(fā)人員可以提供定制化的JSP標簽庫,。

  網(wǎng)頁設(shè)計人員能夠改變和編輯網(wǎng)頁的固定模板部分而不影響應(yīng)用程序,。同樣,開發(fā)人員也無須一個個編輯頁面而只須對組件進行合理的改變,。

  通常,,JSP允許開發(fā)人員向許多網(wǎng)頁設(shè)計人員分發(fā)功能性應(yīng)用程序。這些設(shè)計人員也不必知道Java編程語言或任何servlet代碼,,所以他們能夠集中精力去編寫HTML代碼,,而編程人員就可以集中精力去建立對象和應(yīng)用程序,。

建立JSP頁面
  粗略看來,,JSP網(wǎng)頁和HTML (或XML)網(wǎng)頁非常相似——都包含用標簽封裝的文本(在“<>”之間被定義)。當HTML標簽被用戶的瀏覽器處理以顯示網(wǎng)頁的時候,,JSP標簽?zāi)軌蛲ㄟ^web服務(wù)器的處理來生成動態(tài)內(nèi)容,。這些JSP標簽?zāi)軌蚨x個別的操作,比如說用一個方法來調(diào)用JavaBean,,或者包含標準的Java代碼塊(也就是所謂的scriptlet),,這些代碼塊能夠在網(wǎng)頁被訪問的時候被執(zhí)行。

  為了了解它們?nèi)绾问褂?,下面我們介紹了一個JSP網(wǎng)頁的簡單例子,,在這個JSP網(wǎng)頁中包含了靜態(tài)HTML內(nèi)容和從JavaBean生成的動態(tài)數(shù)據(jù)。當用戶訪問這個網(wǎng)頁的時候,,它可以顯示當前的日期,,并根據(jù)當前的時間增加相應(yīng)的問候語(例如“早上好”和“下午好”)。為簡單起見,JSP標簽顯示在塊中:

  

  <%@ page language="java" imports="java.util.*" %>

  

Welcome



  

Today is



  

  


      
  • Day: <%= clock.getDayOfMonth() %>

      
  • Year: <%= clock.getYear() %>

      


  <%-- Check for AM or PM --%>

  <%! int time = Calendar.getInstance().get(Calendar.AM_PM); %>

  <%

  if (time == Calendar.AM) {

  %>

  早上好

  <%

  }

  else {

  %>

  下午好

  <%

  }

  %>

  <%@ include file="copyright.html" %>

  

  上面的JSP例子是不是很簡單,?我們在JSP網(wǎng)頁中使用了幾個不同的組件,。這些組件包括下面的內(nèi)容:

  JSP action (或JSP標簽)使用了多種函數(shù)并擴展了JSP的功能。JSP action使用的是一種類似XML的語法,,并且被用來處理JavaBean組件,。在上面的例子中,jsp:useBean action初始化了一個JavaBean ,,JavaBean將在網(wǎng)頁的后面部分被用到:

  

  如果在網(wǎng)頁中需要獲得和設(shè)置這個Bean的屬性,,另一個JSP action將被給出,使用的是下面的語法:

  

  

  當網(wǎng)頁被編譯成一個servlet的時候,,Directive將被JSP引擎處理,。Directive被用來設(shè)置頁面級的指令、從外部文件插入數(shù)據(jù)以及制定定制的標簽庫,。Directive被定義在<%@ 和 %>之間,。 在上面的例子中,Directive定義了頁面所使用的語言(Java),,為了關(guān)聯(lián)Java類需要植入代碼并指定一個將要插入頁面底部的HTML文件內(nèi)容:

  <%@ page language=="java" imports=="java.util.*" %>

  <%@ include file=="copyright.html" %>

  聲明與Java中的變量聲明相似,,它也是為了后面表達式或scriptlet的需要來定義變量。聲明被定義在<%! 和 %>之間,。在上面的例子中,,“int”聲明并給出了一個當前時間的相應(yīng)值 (AM 或 PM):

  <%! int time = Calendar.getInstance().get(Calendar.AM_PM); %>

  表達式可以是變量或常量,它插在由web服務(wù)器所返回的數(shù)據(jù)里,,并用<%= 和 %>來定義,。在上面的例子中,表達式將調(diào)用JavaBean組件并在頁面中插入結(jié)果數(shù)據(jù):

  <%= clock.getDayOfMonth() %>

  <%= clock.getYear() %>

  Scriptlet將作為一個Java代碼塊植入JSP頁面中,。Scriptlet代碼被一一插入由頁面所產(chǎn)生的servlet中,,它被定義在<% 和%>之間。上面例子中的scriptlet可以根據(jù)當前用戶產(chǎn)生相應(yīng)的時間和問候語:

  <%

  if (time == Calendar.AM) {

  %>

  早上好

  <%

  }

  else {

  %>

  下午好

  <%

  }

  %>

  注釋部分和HTML的注釋相似,,當在執(zhí)行的時候JSP引擎將去掉對注釋的解釋,。這就意味著JSP注釋并不返回到用戶的瀏覽器中。不象HTML注釋被定義在標簽之間,,JSP注釋被定義在<%--和 --%>之間,。例如:
使用定制化的標簽
  盡管你可以在JSP頁面中植入Java代碼并在服務(wù)器方執(zhí)行,但是,,JSP也支持使用定制標簽來插入動態(tài)內(nèi)容,,它有一種機制可以讓你在JSP頁面中插入你自己的、與HTML類似的標簽,。換句話說,,你的JSP網(wǎng)頁能夠使用插入Java代碼的簡單標簽語法產(chǎn)生動態(tài)的內(nèi)容,。但定制標簽的用處不是很大。

  創(chuàng)建一個定制標簽比在JSP網(wǎng)頁中使用簡單的scriptlet要復雜得多,,因為定制標簽需要用幾個步驟來把你的Java組件和JSP代碼連接起來,。不過,定制標簽在分發(fā)和重復使用的時候就非常簡單了,。對定制標簽的支持將在JSP創(chuàng)建工具中實現(xiàn),。

  在下面的例子中產(chǎn)生動態(tài)內(nèi)容的JSP網(wǎng)頁就使用了定制標簽。注意,,在這個例子中我們不再需要引入Java類,、聲明變量或?qū)懭魏蜫ava代碼:

  

  <%@ taglib uri="/tlds/menuDB.tld" prefix="menu" %>

  

Today‘s Menu



  

Lunch



  <%@ include file="lunch_menu.html" %>

  

Our Special of the Day



  

  

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

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

 ?。?)標簽庫描述符,。它是一個定義了定制化標簽并把它和Tag Handler連接起來的XML文件。一個標簽庫描述符包含了標簽的不同屬性,,相關(guān)Tag Handler的名稱(位置)以及JSP引擎需要處理定制標簽的其他信息,。

  (2)Tag Handler,。 它是一個與定制標簽聯(lián)合執(zhí)行操作的Java類,。例如,,在上面的insertCatchOfDay標簽中,,Tag Handler就是執(zhí)行數(shù)據(jù)庫查詢得到相應(yīng)菜單項的Java類。

  我們已經(jīng)看到了一個使用定制標簽的JSP網(wǎng)頁,,下面讓我們來看一看另外的兩個組件,。

  Tag Handler

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

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

  private String meal = null;

  public void setMeal(String s) {

  meal = s;

  }

  public String getMeal() {

  return meal;

  }

  Tag Library Descriptor

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

  下面的標簽庫描述符定義了insertCatchOfDay標簽,。注意,,這個文件定義了定制標簽的名稱,屬性和相關(guān)的Tag Handler類:

  

  

  

  insertCatchOfDay

  com.sun.CatchOfDayHandler

  

  Queries menu database for the catch of the day,。

  


  

  meal

  


  


  


  與定義屬性的名稱一樣,,標簽庫描述符也能夠定義數(shù)據(jù)類型并指定其屬性(無論是否需要);在Tag Handler被執(zhí)行之前,,它允許JSP引擎去做某些錯誤檢查,。還有其他的信息,比如說為了使用JSP創(chuàng)建工具,,庫名和版本號也可以包含在標簽庫中,。

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

  

  <%@ page language=="java" info="Example JSP #1" %>

  

  

  <%! String agent; %>

  <%

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

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

  %>

  <%-- Return content for 4.0 browsers --%>

  <%@ include file="ver4.html" %>

  <%

  }

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

  %>

  <%-- Return content for 3.0 browsers --%>

  <%@ include file="ver3.html" %>

  <%

  }

  else {

  %>

  <%-- Return content for other/unknown browsers --%>

  <%@ include file="other.html" %>

  <%

  }

  %>

  

  

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

  

  <%@ page language="java" info="Example JSP #2" %>

  

  

  <%@ include file="header.html" %>

  

  <%! String selections[],, info; %>

  

Here are your current selections:



  <%

  

  selections = request.getParameterValues("items");

  if (selections != null) {

  %>


      <%

      for(int x = 0; x < selections.length; x++) {

      %>


  •   <%= selections[x] %> : <%= db.getInfo(selections[x]) %>

      <%

      }

      %>
<%

  }

  else {

  %>

  

(no items selected)



  <%

  }

  %>

  


  <%@ include file="footer.html" %>

  

  

  在這個例子中,當每一個參數(shù)值都被讀取以后,,JavaBean組件便查詢所需要的信息,。在JSP網(wǎng)頁中使用Bean這種方法可以容易地從數(shù)據(jù)庫中返回動態(tài)web內(nèi)容。

結(jié)論
  如果你正在尋找一種能簡便建立連接服務(wù)器方Java組件的web程序的方法,,那么JavaServer Page正是你所需要的,。除了EJB,RMI,,JDBC和JavaBean外,,分離HTML表述代碼和web程序,也使得JSP網(wǎng)頁組織起來運行變得更容易了,。事實上,,由于web設(shè)計人員幾乎無須Java開發(fā)人員的幫助就可以建立JSP頁面,,所以你再也不同擔心創(chuàng)建web網(wǎng)頁和寫HTML代碼了。

  <全文完>

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多