婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > JSP模板應用指南(上)

JSP模板應用指南(上)

熱門標簽:地圖標注創業項目入駐 電銷外呼系統 排行榜 地圖標注制作道路 山東智能云外呼管理系統 廣州三五防封電銷卡 長春回撥外呼系統廠家 四川電信外呼系統靠譜嗎 珠海銷售外呼系統運營商 外呼系統啥意思
Window 工具包提供了一種典型的布局機制,比如說在一個容器中確定部件元素的位置。在AWT 和 Swing都有布局管理器,而在VisualWorks Smalltalk中有wrapper。本文將介紹一種JSP模板機制,它允許布局被封裝和重新利用。JSP模板最小化了布局改變所造成的影響,這里我們將鼓勵大家采用封裝模塊化設計。

  盡管 Web開發工具的改進非常迅速,但是它們仍然落后于圖形用戶界面(GUI)工具包(Swing 和 VisualWorks Smalltalk)。例如,在傳統的GUI工具包中提供了布局管理器,在一個窗體或另一個窗體中,允許布局運算被封裝和重新利用。本文介紹的這種JSP模板機制,就象布局管理器一樣,可以封裝布局,所以它能夠被重新利用而不只是復制使用。

  由于在布局的發展過程中出現了許多的變化,而對功能的封裝是非常重要的一步,它能夠被自如修改而做到對其他應用的影響最小。

  JSP沒有提供對封裝布局的直接支持,所以具有統一格式的網頁通常可以復制布局代碼;例如,在圖1中,顯示了一個網頁,它包含了標題、頁腳、工具條以及頁面的主要內容。


  圖1.網頁布局 點擊放大(22 KB)

  在圖1中顯示的網頁布局將以HTML表格標簽來執行:

  例1.包含內容:

  html>head>title>JSPtemplates/title>/head>

  body background='graphics/background.jpg'>

  table>

   tr valign='top'>td>%@include file='sidebar.html'%>/td>

     td>table>

       tr>td>%@include file='header.html'%>/td>/tr>

       tr>td>%@include file='introduction.html'%>/td>/tr>

       tr>td>%@include file='footer.html'%>/td>/tr>

       /table>

     /td>

   /tr>

  /table>

  /body>/html>

  在上面的例子中,包括了JSP include 命令,它允許頁面內容改變——通過改變包含的文件——無須修改網頁自身。不過,由于布局是很難被編碼的,布局改變需要對網頁進行修改。如果一個網站有多個相同格式的頁面,那么一般情況下甚至簡單布局的改變也涉及到整個頁面的修改。

  為了減少布局改變所造成的影響,我們需要一種僅僅只包含布局的機制;采用這種機制,布局和內容都可以在不修改文件的情況下分開進行修改。這種機制就是JSP模板。

使用模板
  模板是一種JSP文件,它包含了參數化了的內容。這里所討論的模板使用的是一套定制化標簽來執行的:template:get,template:put和template:insert。template:get 標簽訪問參數化的內容,就象在例 2.a中的一樣,它將和圖 1一樣的格式來生成網頁。

  例 2.a.一個模板

  %@taglib uri='/WEB-INF/tlds/template.tld' prefix='template' %>

  html>head>title>template:get name='title'/>/title>/head>

  body background='graphics/background.jpg'>

  table>

   tr valign='top'>td>template:get name='sidebar'/>/td>

     td>table>

        tr>td>template:get name='header'/>/td>/tr>

        tr>td>template:get name='content'/>/td>/tr>

        tr>td>template:get name='footer'/>/td>/tr>

       /table>

     /td>

   /tr>

  /table>

  /body>/html>

  例 2.a幾乎與例1完全一樣,不過在例2.a中我們使用了template:get 取代了例1中的include 命令.讓我們來分析一下template:get 如何運行。

  template:get 使用了一個專門的名字(在請求的范圍內)來對一個Java Bean進行修改。Bean包含了URI (統一資源標志符,網頁的一個組件,它包含在template:get中)。例如,在例 2.a的模板列表中,template:get 獲得了一個URI——header.html——從一個名為header 的Bean中(在請求的范圍內)。接著在template:get 中包含了header.html。

  template:put 把Bean放到請求的范圍內(此范圍將在后面被template:get修改)。 模板包含在template:insert中。 例 2.b中舉例說明了put 和 insert 標簽的用法:

  例 2.b. 從例2.a中使用模板

  %@taglib uri='/WEB-INF/tlds/template.tld' prefix='template' %>

  template:inserttemplate='/articleTemplate.jsp'>

   template:put name='title' content='Templates' direct='true'/>

   template:put name='header' content='/header.html' />

   template:put name='sidebar' content='/sidebar.jsp' />

   template:put name='content' content='/introduction.html'/>

   template:put name='footer' content='/footer.html' />

  /template: insert>

  在insert 開頭標簽指定了被包含的模板,在這個例子里,模板在例2.a中。每一個put 標簽在請求范圍內存儲了一個Bean,而在insert 結尾標簽包含了模板。模板接著象上面所描述的那樣訪問Bean。

  direct 的屬性能夠為template:put指定;如果direct 設置為true, 和標簽相關聯的內容將不包含在template: get中。

  一個網站包含了多頁相同格式的頁面,這樣就可以使用一個模板,比如在例 2.a中列出了一個模板,在許多的JSP網頁(例2.b)中,都用到了這個模板。

  使用模板的另一個好處是可以進行模塊化設計。例如,例2.b中列出的JSP 文件中包含了header.html,讓我們再來看下面的例2.c。

  例2.c. header.html

  table>

   tr>

     td>img src='graphics/java.jpg'/>/td>

     td>img src='graphics/templates.jpg'/>/td>

   /tr>

  /table>hr>

  由于header.html 是被包含的內容,所以它不必在需要顯示標頭的頁面中復制其代碼。而且,盡管header.html 是一個HTML文件,但是在文件中并沒有使用一般的起始HTML標簽(比如html>或body>),因為這些標簽都將被模板定義。由于在模板中包含了header.html,這些標簽在header.html就可以不必再使用了。

  注意:JSP提供了兩種方式來包含內容:靜態方式,使用include命令;動態方式,使用include action。include命令包含了目標頁面的引用源,這和C語言中的#include和Java中的import相似。include action 包含了在運行時間內目標所產生的響應。

  與JSP include action一樣,模板包含有動態內容。所以,盡管在例1和例2.b中的JSP網頁在功能上是一致的,但是前面包含的靜態內容被后面動態的包含了。

可選內容
  所有的模板內容都是可選的,模板的內容可以很容易的在更多的網頁中使用。例如,在圖 2.a和圖 2.B中顯示了兩個頁面——登錄和清單——它們使用的是同一個模板。兩個頁面中都包含一個標頭、頁腳和主要內容。清單頁面中有一個編輯Panel (這是登陸頁面所缺乏的)用來改變清單。


  圖 2.a.一個登陸窗口 點擊放大(24 KB)


  圖 2.B.一個清單頁 點擊放大(42 KB)

  下面,你會發現模板將被登錄和清單頁面共用:

  %@taglib uri='template.tld' prefix='template' %>

  ……

  table width='670'>

   tr>td width='60'>/td>

     td>template:get name='header'/>/td>/tr>

   tr>td width='60'>/td>

     td>template:get name='main-content'/>/td>/tr>

   tr>td width='60'>/td>

     td>template:get name='editPanel'/>/td>/tr>

   tr>td width='60'>/td>

   td>template:get name='footer'/>/td>/tr>

  /table>

  ……

  清單頁面使用了上面的模板以及專門用于編輯Panel的內容:

  %@taglib uri='template.tld' prefix='template' %>

  %@taglib uri='security.tld' prefix='security' %>

  template:inserttemplate='/template.jsp'>

   ……

   template:put name='editPanel'

            content='/editPanelContent.jsp'/>

   ……

  /template:insert>

  與上面相對照,登錄頁面沒有專門用于編輯Panel的內容:

  %@taglib uri='template.tld' prefix='template' %>

  template:inserttemplate='/template.jsp'>

   template:put name='title' content='Login' direct='true'/>

   template:put name='header' content='/header.jsp'/>

   template:put name='main-content'

           content='/login.jsp'/>

   template:put name='footer' content='/footer.jsp'/>

  /template:insert>

  由于登錄頁面中沒有專門用于編輯Panel的內容,所以它沒有包括。

基于Role的內容
  Web應用程序常常會基于不同的用戶生成不同的內容。 例如,相同的 JSP模板,只有當用戶為管理員的時候才出現編輯Panel,下面是得出的兩個不同的頁面(如圖3.a和3.b.)


  圖 3.a. 管理員的清單頁面 點擊放大(27 KB)


  圖 3.b.其他用戶的清單頁面 點擊放大(21 KB)

  在圖3.a和3.b中的模板使用了template:get的 role 屬性:

  %@taglib uri='template.tld' prefix='template' %>

  ......

  table>

   ......

   td>template:get name='editPanel' role='curator'/>/td>/tr>

   ......

  /table>

  ......

  get 標簽僅僅在用戶的Role 與Role屬性相匹配的時候才包含內容。讓我們來看看標簽handler是如何使用Role屬性的:

  public class GettagextendstagSupport {

   private String name = null, role = null;

   ......

   public void setRole(String role) { this.role = role; }

   ......

   public int doStartTag() throws JspException {

     ......

     if(param != null) {

       if(roleIsValid()) {

        // include or print content ......

       }

     }

   ......

   }

   private boolean roleIsValid() {

     return role == null || // valid if role isn't set

       ((javax.Servlet.http.HttpServletRequest)

       pageContext.getRequest()).isUserInRole(role);

   }

  }

標簽:吳忠 保定 紹興 潮州 玉樹 肇慶 北海 廣元

巨人網絡通訊聲明:本文標題《JSP模板應用指南(上)》,本文關鍵詞  JSP,模板,應用,指南,上,JSP,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JSP模板應用指南(上)》相關的同類信息!
  • 本頁收集關于JSP模板應用指南(上)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲永久精品大片| 午夜精品久久久久久久久久| 精品国产乱码久久久久久免费| 中文字幕一区二区三区四区不卡 | 3d动漫精品啪啪| 一区二区三区高清| 99久久精品免费| 国产欧美日韩综合精品一区二区| 久久91精品国产91久久小草| 欧美日韩mp4| 亚洲一区二区在线观看视频 | 精品国产露脸精彩对白| 丝袜亚洲精品中文字幕一区| 在线观看亚洲a| 国产精品白丝在线| 91免费看片在线观看| 成人免费在线播放视频| av网站一区二区三区| 亚洲自拍偷拍综合| 欧美精选一区二区| 亚洲国产一二三| 欧美一级在线观看| 精品午夜一区二区三区在线观看| 久久综合九色综合97婷婷女人 | √…a在线天堂一区| 成人中文字幕电影| 国产精品传媒入口麻豆| 99久久精品国产网站| 夜夜精品视频一区二区| 欧美人动与zoxxxx乱| 成人国产免费视频| 亚洲精品中文在线影院| 色美美综合视频| 国产美女精品在线| 欧美一区二区三级| 日本欧美肥老太交大片| 国产精品麻豆一区二区| 亚洲成人免费观看| 91福利社在线观看| 久久久久国产精品人| 91丨九色porny丨蝌蚪| 夜夜嗨av一区二区三区网页| 久久久国产精华| 国产三级三级三级精品8ⅰ区| 日韩一区二区高清| 国产一区二区精品在线观看| 国产精品人成在线观看免费| 豆国产96在线|亚洲| 欧美一区二区在线免费播放| 狠狠色丁香久久婷婷综| 国产精品福利电影一区二区三区四区 | 久久久99久久| 在线欧美日韩国产| 麻豆精品精品国产自在97香蕉| 久久久精品国产免大香伊| 欧美日韩综合不卡| 国产成人aaa| 精品一区二区三区视频在线观看 | 亚洲欧美一区二区三区极速播放| 欧美人与禽zozo性伦| 国模娜娜一区二区三区| 亚洲一卡二卡三卡四卡五卡| 国产亚洲一区二区三区四区| 在线播放国产精品二区一二区四区| 国产一区二区三区四| 亚洲一级二级在线| 国产精品看片你懂得| 日韩一区二区三区电影在线观看| 欧美日韩电影在线播放| 91一区二区在线| 久久爱另类一区二区小说| 日本aⅴ免费视频一区二区三区| 国产日产欧美精品一区二区三区| 精品国产3级a| 欧美一卡二卡在线| 欧美性一区二区| 色婷婷精品大在线视频| 懂色av一区二区夜夜嗨| www.成人网.com| 99久久精品国产网站| 91女厕偷拍女厕偷拍高清| 国产精品123| 国产福利一区二区三区视频在线 | 欧美性大战久久久| 欧洲av在线精品| 色琪琪一区二区三区亚洲区| 日本久久一区二区| 91精品国产手机| 日韩欧美色电影| 国产午夜三级一区二区三| 欧美国产精品一区二区三区| 中文字幕精品一区二区精品绿巨人| 国产精品污污网站在线观看| 日本一区二区三区久久久久久久久不| 国产亚洲综合在线| 一卡二卡三卡日韩欧美| 亚洲国产综合91精品麻豆| 日日夜夜一区二区| 韩国av一区二区三区在线观看| 国产精品66部| 91成人在线精品| 欧美一级国产精品| 欧美国产日韩亚洲一区| ㊣最新国产の精品bt伙计久久| 欧美日韩一级视频| 欧美疯狂做受xxxx富婆| 精品国产免费人成电影在线观看四季 | 日韩午夜av电影| 国产精品进线69影院| 亚洲国产欧美在线| 成人自拍视频在线| 欧美视频一区二区三区四区| 欧美亚洲精品一区| 91精品国产乱| 91网站在线播放| 日韩亚洲欧美高清| 国产精品欧美综合在线| 日韩不卡手机在线v区| 美美哒免费高清在线观看视频一区二区| 国产麻豆精品在线| 欧美在线一二三| 国产日产欧美一区| 奇米一区二区三区av| 日本不卡的三区四区五区| 精品综合久久久久久8888| 色综合一区二区| 中文字幕电影一区| 亚洲一区二区三区小说| 国产传媒一区在线| 欧美电影一区二区三区| 久久精品国产亚洲高清剧情介绍| 在线视频中文字幕一区二区| 精品国产乱子伦一区| 秋霞国产午夜精品免费视频| 成人动漫在线一区| 欧美美女网站色| 亚洲一区二区三区四区五区黄| 同产精品九九九| 欧美亚洲日本一区| 亚洲欧美在线观看| 床上的激情91.| 精品国产网站在线观看| 欧美激情一区二区三区蜜桃视频| 色综合天天综合色综合av | 成人黄色软件下载| 欧美日韩成人在线一区| 自拍偷拍国产亚洲| 美腿丝袜亚洲色图| 91麻豆福利精品推荐| 日韩欧美在线不卡| 一区2区3区在线看| 不卡av在线免费观看| xf在线a精品一区二区视频网站| 免费一区二区视频| 久久久另类综合| 国产在线视视频有精品| 欧美男人的天堂一二区| 日韩不卡手机在线v区| 91精品国产91久久久久久一区二区 | 久久精品99国产国产精| 91精品婷婷国产综合久久性色 | 国产麻豆精品95视频| 欧美电视剧免费观看| 久久66热偷产精品| 国产欧美日本一区视频| 国产精品影视天天线| 亚洲欧美在线视频观看| 欧美伊人精品成人久久综合97| 午夜精品久久久久久久久| 91精品免费在线观看| 国内精品嫩模私拍在线| 国产精品久久久久久亚洲毛片| 波多野结衣中文字幕一区二区三区| 亚洲精品国产成人久久av盗摄 | 91丨九色丨蝌蚪丨老版| 同产精品九九九| 国产人妖乱国产精品人妖| 一本久道中文字幕精品亚洲嫩| 床上的激情91.| 在线亚洲人成电影网站色www| 日本不卡在线视频| 亚洲国产成人午夜在线一区| 在线看一区二区| 国产综合色视频| 亚洲男人的天堂在线aⅴ视频| 日韩免费高清av| av一区二区三区四区| 国产一区二区中文字幕| 亚洲欧美在线aaa| 欧美理论片在线| av在线播放成人| 精品伊人久久久久7777人| 亚洲成av人**亚洲成av**| 久久亚洲捆绑美女| 欧美一区二区三级| 日本大香伊一区二区三区| 首页综合国产亚洲丝袜| 91丝袜美腿高跟国产极品老师| 免费成人性网站| 亚洲丝袜另类动漫二区|