亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

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

2020-07-27 21:54:30
字體:
來源:轉載
供稿:網友
使用定制化的標簽
  盡管你可以在JSP頁面中植入Java代碼并在服務器方執行,但是,JSP也支持使用定制標簽來插入動態內容,它有一種機制可以讓你在JSP頁面中插入你自己的、與HTML類似的標簽。換句話說,你的JSP網頁能夠使用插入Java代碼的簡單標簽語法產生動態的內容。但定制標簽的用處不是很大。

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

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

  

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

  

Today's Menu



  

Lunch



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

  

Our Special of the Day



  

  

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

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

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

 ?。?)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類:

  

  

  

  insertCatchOfDay

  com.sun.CatchOfDayHandler

  

  Queries menu database for the catch of the day。

  


  

  meal

  

  


  


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

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

  

  <%@ 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請求對象就可以直接對它進行訪問。請求和響應(HttpServletResponse)對象都能夠隱含地在JSP 頁面中使用。和servlet一樣,JSP頁面能夠使用請求對象從HTML窗體中獲得參數值。

  

  <%@ 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" %>

  

  

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

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

  <全文完>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色中文字幕| 国模视频一区二区| 热99久久精品| 国产精品揄拍一区二区| 亚洲人成在线观看| 日韩中文字在线| 国产亚洲精品一区二555| 日韩毛片在线观看| 欧美激情视频免费观看| 粉嫩av一区二区三区免费野| 国产精品揄拍500视频| 欧美激情精品久久久久久免费印度| 亚洲天堂男人天堂| 欧美一区二区三区免费视| 中文字幕综合一区| 亚洲最大福利视频| 亚洲国产第一页| 日本高清视频一区| 一区二区三区无码高清视频| 国内免费久久久久久久久久久| 日本精品久久中文字幕佐佐木| 久久精品视频播放| 美女av一区二区三区| 都市激情亚洲色图| 亚洲欧美中文日韩v在线观看| 欧美精品在线观看91| 亚洲天堂av高清| 国产精品一区电影| 91免费欧美精品| 亚洲少妇激情视频| 最新国产精品拍自在线播放| 亚洲精品之草原avav久久| 久久久精品久久| 在线免费看av不卡| 久久视频在线免费观看| 26uuu另类亚洲欧美日本老年| 国产视频精品一区二区三区| 91深夜福利视频| 高跟丝袜一区二区三区| 日本不卡免费高清视频| 日韩欧美亚洲国产一区| 国产精品香蕉国产| 亚洲一区二区三区四区在线播放| 日韩www在线| 欧美电影免费观看| 国产一区二区动漫| 日本免费久久高清视频| 亚洲国产精品专区久久| 成人精品一区二区三区电影黑人| 久久久www成人免费精品张筱雨| 奇门遁甲1982国语版免费观看高清| 日韩免费观看视频| 欧美成人高清视频| 欧美激情综合色综合啪啪五月| 国产婷婷97碰碰久久人人蜜臀| 欧美国产日本在线| 亚洲综合在线中文字幕| 亚洲色图狂野欧美| 久久精品国产清自在天天线| 久久中文字幕一区| 日韩精品高清在线| 18性欧美xxxⅹ性满足| 欧美在线免费观看| 欧美激情视频在线免费观看 欧美视频免费一| 黄色成人av网| 韩国福利视频一区| 日韩欧美一区二区三区久久| 国产成人精品在线观看| 欧美专区在线播放| 国产乱肥老妇国产一区二| 精品伊人久久97| 欧美性黄网官网| 在线观看视频亚洲| 全球成人中文在线| 国产婷婷色综合av蜜臀av| 欧美片一区二区三区| 国产一区二区三区日韩欧美| 久久国产视频网站| yw.139尤物在线精品视频| 国产a级全部精品| 日韩激情片免费| 一本色道久久综合亚洲精品小说| 亚洲**2019国产| 久久九九有精品国产23| 久久久成人av| 丝袜亚洲欧美日韩综合| 欧美日韩综合视频网址| 韩国国内大量揄拍精品视频| 精品福利樱桃av导航| 91产国在线观看动作片喷水| 久久国产天堂福利天堂| 精品国产乱码久久久久久婷婷| 两个人的视频www国产精品| 中日韩美女免费视频网站在线观看| 亚洲一区av在线播放| 亚洲精品mp4| 国产69精品久久久久久| 亚洲www在线观看| 成人久久精品视频| 欧美午夜精品久久久久久久| 久久精品91久久久久久再现| 色狠狠av一区二区三区香蕉蜜桃| 久久天堂av综合合色| 亚洲一区二区三区视频| 亚洲电影免费观看高清完整版| 欧美日韩精品在线播放| 成人中心免费视频| 日本国产欧美一区二区三区| 成人疯狂猛交xxx| 亚洲xxx自由成熟| 久久综合久久八八| 日韩美女在线看| 欧美乱人伦中文字幕在线| 亚洲综合精品一区二区| 欧美激情第99页| 5566日本婷婷色中文字幕97| 久久久久久成人精品| 国产欧美va欧美va香蕉在| 亚洲成年人在线播放| 色婷婷综合久久久久| 国产精品国内视频| 亚洲男人的天堂网站| 欧美激情国产日韩精品一区18| 亚洲精品国产成人| 亚洲天堂男人的天堂| 日韩欧美在线免费观看| 91免费人成网站在线观看18| 国产精品视频永久免费播放| 日韩日本欧美亚洲| 丁香五六月婷婷久久激情| 欧美精品在线极品| 久久久久久久999精品视频| 日韩电影在线观看永久视频免费网站| 成人黄色网免费| 欧美激情a∨在线视频播放| 91九色蝌蚪国产| 国内精品视频在线| 亚洲香蕉成视频在线观看| 成人做爰www免费看视频网站| 亚洲精品第一国产综合精品| 亚洲视频在线播放| 久久精品99无色码中文字幕| 日本午夜精品理论片a级appf发布| 一本色道久久88精品综合| 欧美日韩亚洲91| 97香蕉久久夜色精品国产| 亚洲va欧美va国产综合剧情| 亚洲视频欧洲视频| xxav国产精品美女主播| 日韩精品视频免费在线观看| 国产成人精品视频在线观看| xxx成人少妇69| 精品成人av一区| 欧美成人一二三| 成人激情视频在线| 日韩国产在线看| 亚洲精品视频中文字幕| 成人av资源在线播放| 国产日韩欧美视频| 国产69精品久久久久9| 中国人与牲禽动交精品| 一区二区三区回区在观看免费视频| 欧美在线观看视频| 一区二区在线免费视频|