狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

JSP模板應(yīng)用向?qū)Вㄉ希? /></div>
<div   id=

JSP模板應(yīng)用向?qū)Вㄉ希?/h1>
更新時(shí)間:2019-05-15 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

Window 工具包提供了一種典型的布局機(jī)制,比如說(shuō)在一個(gè)容器中確定部件元素的位置。在AWT 和 Swing都有布局管理器,而在VisualWorks Smalltalk中有wrapper。本文將介紹一種JSP模板機(jī)制,它允許布局被封裝和重新利用。JSP模板最小化了布局改變所造成的影響,這里我們將鼓勵(lì)大家采用封裝模塊化設(shè)計(jì)。

  盡管 Web開(kāi)發(fā)工具的改進(jìn)非常迅速,但是它們?nèi)匀宦浜笥趫D形用戶界面(GUI)工具包(Swing 和 VisualWorks Smalltalk)。例如,在傳統(tǒng)的GUI工具包中提供了布局管理器,在一個(gè)窗體或另一個(gè)窗體中,允許布局運(yùn)算被封裝和重新利用。本文介紹的這種JSP模板機(jī)制,就象布局管理器一樣,可以封裝布局,所以它能夠被重新利用而不只是復(fù)制使用。

  由于在布局的發(fā)展過(guò)程中出現(xiàn)了許多的變化,而對(duì)功能的封裝是非常重要的一步,它能夠被自如修改而做到對(duì)其他應(yīng)用的影響最小。

  JSP沒(méi)有提供對(duì)封裝布局的直接支持,所以具有統(tǒng)一格式的網(wǎng)頁(yè)通常可以復(fù)制布局代碼;例如,在圖1中,顯示了一個(gè)網(wǎng)頁(yè),它包含了標(biāo)題、頁(yè)腳、工具條以及頁(yè)面的主要內(nèi)容。


  圖1.網(wǎng)頁(yè)布局 點(diǎn)擊放大(22 KB)

  在圖1中顯示的網(wǎng)頁(yè)布局將以HTML表格標(biāo)簽來(lái)執(zhí)行:

  例1.包含內(nèi)容:

  <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 命令,它允許頁(yè)面內(nèi)容改變——通過(guò)改變包含的文件——無(wú)須修改網(wǎng)頁(yè)自身。不過(guò),由于布局是很難被編碼的,布局改變需要對(duì)網(wǎng)頁(yè)進(jìn)行修改。如果一個(gè)網(wǎng)站有多個(gè)相同格式的頁(yè)面,那么一般情況下甚至簡(jiǎn)單布局的改變也涉及到整個(gè)頁(yè)面的修改。

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

使用模板
  模板是一種JSP文件,它包含了參數(shù)化了的內(nèi)容。這里所討論的模板使用的是一套定制化標(biāo)簽來(lái)執(zhí)行的:template:get,template:put和template:insert。template:get 標(biāo)簽訪問(wèn)參數(shù)化的內(nèi)容,就象在例 2.a中的一樣,它將和圖 1一樣的格式來(lái)生成網(wǎng)頁(yè)。

  例 2.a.一個(gè)模板

  <%@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完全一樣,不過(guò)在例2.a中我們使用了template:get 取代了例1中的include 命令.讓我們來(lái)分析一下template:get 如何運(yùn)行。

  template:get 使用了一個(gè)專(zhuān)門(mén)的名字(在請(qǐng)求的范圍內(nèi))來(lái)對(duì)一個(gè)Java Bean進(jìn)行修改。Bean包含了URI (統(tǒng)一資源標(biāo)志符,網(wǎng)頁(yè)的一個(gè)組件,它包含在template:get中)。例如,在例 2.a的模板列表中,template:get 獲得了一個(gè)URI——header.html——從一個(gè)名為header 的Bean中(在請(qǐng)求的范圍內(nèi))。接著在template:get 中包含了header.html。

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

  例 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 開(kāi)頭標(biāo)簽指定了被包含的模板,在這個(gè)例子里,模板在例2.a中。每一個(gè)put 標(biāo)簽在請(qǐng)求范圍內(nèi)存儲(chǔ)了一個(gè)Bean,而在insert 結(jié)尾標(biāo)簽包含了模板。模板接著象上面所描述的那樣訪問(wèn)Bean。

  direct 的屬性能夠?yàn)閠emplate:put指定;如果direct 設(shè)置為true, 和標(biāo)簽相關(guān)聯(lián)的內(nèi)容將不包含在template: get中。

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

  使用模板的另一個(gè)好處是可以進(jìn)行模塊化設(shè)計(jì)。例如,例2.b中列出的JSP 文件中包含了header.html,讓我們?cè)賮?lái)看下面的例2.c。

  例2.c. header.html

  <table>

   <tr>

     <td><img src='http://www.okasp.com/techinfo/graphics/java.jpg'/></td>

     <td><img src='http://www.okasp.com/techinfo/graphics/templates.jpg'/></td>

   </tr>

  </table><hr>

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

  注意:JSP提供了兩種方式來(lái)包含內(nèi)容:靜態(tài)方式,使用include命令;動(dòng)態(tài)方式,使用include action。include命令包含了目標(biāo)頁(yè)面的引用源,這和C語(yǔ)言中的#include和Java中的import相似。include action 包含了在運(yùn)行時(shí)間內(nèi)目標(biāo)所產(chǎn)生的響應(yīng)。

  與JSP include action一樣,模板包含有動(dòng)態(tài)內(nèi)容。所以,盡管在例1和例2.b中的JSP網(wǎng)頁(yè)在功能上是一致的,但是前面包含的靜態(tài)內(nèi)容被后面動(dòng)態(tài)的包含了。

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


  圖 2.a.一個(gè)登陸窗口 點(diǎn)擊放大(24 KB)


  圖 2.B.一個(gè)清單頁(yè) 點(diǎn)擊放大(42 KB)

  下面,你會(huì)發(fā)現(xiàn)模板將被登錄和清單頁(yè)面共用:

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

  ……

  清單頁(yè)面使用了上面的模板以及專(zhuān)門(mén)用于編輯Panel的內(nèi)容:

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

  與上面相對(duì)照,登錄頁(yè)面沒(méi)有專(zhuān)門(mén)用于編輯Panel的內(nèi)容:

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

  由于登錄頁(yè)面中沒(méi)有專(zhuān)門(mén)用于編輯Panel的內(nèi)容,所以它沒(méi)有包括。

基于Role的內(nèi)容
  Web應(yīng)用程序常常會(huì)基于不同的用戶生成不同的內(nèi)容。 例如,相同的 JSP模板,只有當(dāng)用戶為管理員的時(shí)候才出現(xiàn)編輯Panel,下面是得出的兩個(gè)不同的頁(yè)面(如圖3.a和3.b.)


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


  圖 3.b.其他用戶的清單頁(yè)面 點(diǎn)擊放大(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 標(biāo)簽僅僅在用戶的Role 與Role屬性相匹配的時(shí)候才包含內(nèi)容。讓我們來(lái)看看標(biāo)簽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);

   }

  }

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧美一区二区在线| 国产乱对白刺激视频不卡| 成人av在线网| 久久五月婷婷丁香社区| 色婷婷精品久久二区二区蜜臀av| 亚洲图片另类小说| 午夜亚洲性色福利视频| 久久九九久精品国产免费直播| 欧美午夜精品久久久久免费视| 欧美日本三区| 在线观看欧美一区| 亚洲看片一区| 久久av免费一区| 一本大道久久a久久综合婷婷| 91在线视频观看| 久久精品九九| 亚洲精品国产成人久久av盗摄| 91麻豆国产自产在线观看| 国产成人亚洲综合色影视| 成人高清视频在线观看| 女主播福利一区| 亚洲日韩成人| 色呦呦国产精品| 欧美日韩免费观看一区二区三区| 日韩一区二区不卡| 国产农村妇女毛片精品久久麻豆 | 丝袜亚洲精品中文字幕一区| 日本三级亚洲精品| 日韩精品电影一区亚洲| 亚洲精品你懂的| 国产欧美精品日韩区二区麻豆天美| 久久综合九九| 91麻豆精品国产自产在线观看一区| 日韩一区二区免费在线电影| 久久精品一区四区| 亚洲午夜影视影院在线观看| 美女mm1313爽爽久久久蜜臀| 成人午夜精品在线| 国产精品啊v在线| 久久黄色影院| 精品乱人伦小说| 一区二区三区精品久久久| 久久精品国产第一区二区三区| 成人动漫在线一区| 国产欧美日韩伦理| 日韩网站在线看片你懂的| 中文字幕日韩精品一区| 久久国产精品无码网站| 日韩精品在线看片z| 国产无一区二区| 一区二区三区免费看视频| 丝袜国产日韩另类美女| 成人高清在线视频| 亚洲欧美国产精品桃花| 欧美一级午夜免费电影| 亚洲综合精品久久| 成人免费高清在线| 亚洲一区二区免费看| 日韩欧美亚洲一区二区| 亚洲成a人片综合在线| av一区二区久久| 一本久久精品一区二区| 国产日韩欧美一区二区三区乱码| 日韩国产成人精品| 国内自拍亚洲| 欧美一区二区精品| 视频在线在亚洲| 国产精品v日韩精品v欧美精品网站 | 欧美本精品男人aⅴ天堂| 亚洲一区二区三区精品在线观看 | 另类欧美日韩国产在线| 国语自产精品视频在线看抢先版结局| 欧日韩精品视频| 中文字幕一区二| 成人a区在线观看| 在线免费观看一区| 亚洲国产你懂的| 激情欧美丁香| 久久精品网站免费观看| 国产一区二三区| 在线观看一区二区视频| 亚洲综合丝袜美腿| 黄色成人在线网址| 久久久久久久网| www.日本不卡| 日韩欧美一区在线| 国产精品一区二区三区乱码 | 国产精品久久久久久久久晋中| 久久精品国产亚洲a| 免费亚洲网站| 日韩一级完整毛片| 三级欧美韩日大片在线看| 高清国产一区二区三区| 欧美日精品一区视频| 免费在线一区观看| 色婷婷香蕉在线一区二区| 一级精品视频在线观看宜春院 | 成人午夜碰碰视频| 欧美va亚洲va香蕉在线| 福利视频网站一区二区三区| 欧美一区二区三区在线| 韩国理伦片一区二区三区在线播放| 色网综合在线观看| 日本在线不卡视频一二三区| 久久精品电影| 日韩福利视频导航| 91国偷自产一区二区三区成为亚洲经典 | 久久蜜桃av一区二区天堂| 99麻豆久久久国产精品免费优播| 精品乱人伦小说| 色综合网色综合| 亚洲国产精华液网站w| 国产精品久久| 亚洲黄色录像片| 久久久www| 玖玖九九国产精品| 91精品国产综合久久小美女| 国产成人啪免费观看软件| 精品国产乱码久久久久久1区2区| 92国产精品观看| 中文字幕一区av| 免费毛片一区二区三区久久久| 视频一区二区三区中文字幕| 欧美日韩国产电影| 懂色av一区二区三区蜜臀| 久久久91精品国产一区二区精品| 国产主播一区| 亚洲国产成人高清精品| 欧美日韩高清一区二区三区| 成人动漫一区二区三区| 中文字幕中文在线不卡住| 中文一区在线| 国产综合久久久久久鬼色| 亚洲精品在线电影| 亚洲国产一区二区精品专区| 蜜桃视频在线观看一区| 精品久久国产字幕高潮| 亚洲美女少妇无套啪啪呻吟| 蜜臀精品久久久久久蜜臀 | 亚洲电影你懂得| 欧美美女黄视频| 欧美三级午夜理伦三级中文幕| 亚洲一区免费在线观看| 91精品国产美女浴室洗澡无遮挡| 欧美在线91| 奇米色一区二区三区四区| 欧美精品一区二区久久久| 国产私拍一区| 国产99一区视频免费| 亚洲美女在线国产| 日韩视频免费观看高清完整版在线观看| 欧美日韩午夜| 精品一区二区三区视频在线观看| 欧美国产丝袜视频| 日本高清不卡在线观看| 欧美日本亚洲| 国模套图日韩精品一区二区 | 亚洲一区二区3| 精品久久久久久久久久久久久久久 | 蜜臀av一级做a爰片久久| 国产精品电影院| 91精品黄色片免费大全| 免费不卡亚洲欧美| 欧美日韩一区二| 国产一区二区美女| 亚洲精品视频免费看| 日韩欧美区一区二| 久久久久久亚洲精品杨幂换脸 | www.爱久久.com| 蜜桃视频一区二区三区| 亚洲三级小视频| 精品国产三级电影在线观看| 在线视频国产一区| 亚洲精品1区2区| 91在线丨porny丨国产| 激情图片小说一区| 亚洲123区在线观看| 国产精品超碰97尤物18| 2023国产精华国产精品| 69精品人人人人| 老司机亚洲精品| 国产日韩精品视频一区二区三区| 色综合久久中文综合久久97| 韩国女主播一区| 日韩高清在线不卡| 亚洲成在人线在线播放| 亚洲欧美日韩国产另类专区| 欧美国产亚洲另类动漫| www日韩大片| 日韩精品中午字幕| 欧美一区二区人人喊爽| 欧美日韩不卡视频| 欧美色倩网站大全免费| 色8久久精品久久久久久蜜| 中日韩视频在线观看| av成人国产| 国产精品久久九九| 久久福利毛片| 久久野战av| 色哟哟国产精品|