使用定制化的標(biāo)簽 Today's MenuLunch <%@ include file="lunch_menu.html" %> Our Special of the Day 從上面的語句中我們可以看出,這個頁面明顯比前面的scriptlet例子要簡單許多,因?yàn)樗鼪]有包含初始化對象和執(zhí)行相應(yīng)的方法。但是JSP網(wǎng)頁代碼僅僅只是一部分;對于每一個定制標(biāo)簽,還包括下面的三個組件: (1)包含定制標(biāo)簽的網(wǎng)頁,比如說,上面的代碼片斷中就使用了insertCatchOfDay 的定制標(biāo)簽。在使用定制標(biāo)簽之前,頁面必須指定Taglib Directive來提供標(biāo)簽庫描述符(對標(biāo)簽定義)的位置。當(dāng)執(zhí)行定制標(biāo)簽的時候,網(wǎng)頁還有代表性的定義了一個和多個標(biāo)簽屬性(比如在這個例子中的“meal”)來確定動態(tài)內(nèi)容。 。2)標(biāo)簽庫描述符。它是一個定義了定制化標(biāo)簽并把它和Tag Handler連接起來的XML文件。一個標(biāo)簽庫描述符包含了標(biāo)簽的不同屬性,相關(guān)Tag Handler的名稱(位置)以及JSP引擎需要處理定制標(biāo)簽的其他信息。 (2)Tag Handler。 它是一個與定制標(biāo)簽聯(lián)合執(zhí)行操作的Java類。例如,在上面的insertCatchOfDay標(biāo)簽中,Tag Handler就是執(zhí)行數(shù)據(jù)庫查詢得到相應(yīng)菜單項(xiàng)的Java類。 我們已經(jīng)看到了一個使用定制標(biāo)簽的JSP網(wǎng)頁,下面讓我們來看一看另外的兩個組件。 Tag Handler tag handler是一個與servlet比較相似的Java類。但是servlet能夠執(zhí)行Servlet接口,還能夠被HTML GET或POST請求所執(zhí)行。tag handler也能夠執(zhí)行一個標(biāo)簽接口(javax.servlet.jsp.Tag)以及在定制標(biāo)簽被JSP引擎處理的時候執(zhí)行。 如果定制標(biāo)簽包含了屬性,那么tag handler就必須定義這些屬性以及每一個的get/set方法。例如,當(dāng)定義上面insertCatchOfDay定制標(biāo)簽的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方面的東西,那么標(biāo)簽庫描述符組件可能看起來會比較陌生。但是你也不需要擔(dān)心,因?yàn)槟悴恍枰獙W(xué)習(xí)一門新的編程語言。標(biāo)簽庫描述符僅僅使用與HTML相似的標(biāo)簽語法來定義定制標(biāo)簽的名字和屬性,這更象定義一個對象。 下面的標(biāo)簽庫描述符定義了insertCatchOfDay標(biāo)簽。注意,這個文件定義了定制標(biāo)簽的名稱,屬性和相關(guān)的Tag Handler類: xml="" version="1.0"?> Queries menu database for the catch of the day。 與定義屬性的名稱一樣,標(biāo)簽庫描述符也能夠定義數(shù)據(jù)類型并指定其屬性(無論是否需要);在Tag Handler被執(zhí)行之前,它允許JSP引擎去做某些錯誤檢查。還有其他的信息,比如說為了使用JSP創(chuàng)建工具,庫名和版本號也可以包含在標(biāo)簽庫中。 更多的例子 在下面的例子中,第一個例子在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請求對象就可以直接對它進(jìn)行訪問。請求和響應(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++)="" {=""> %> } else { %> (no items selected) <% } %> <%@ include file="footer.html" %> 在這個例子中,當(dāng)每一個參數(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)頁組織起來運(yùn)行變得更容易了。事實(shí)上,由于web設(shè)計人員幾乎無須Java開發(fā)人員的幫助就可以建立JSP頁面,所以你再也不同擔(dān)心創(chuàng)建web網(wǎng)頁和寫HTML代碼了。 <全文完> |
溫馨提示:喜歡本站的話,請收藏一下本站!