<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102

    Struts 原理的解析與其實踐指導大全(1)

    Posted on 2005-03-23 17:37 海天一鷗 閱讀(366) 評論(0)  編輯  收藏 所屬分類: Struts專題
    本篇文章簡單地介紹一下在struts中使用tiles的問題。

    1、tiles框架簡介:

    大家在編程實踐中都會對代碼重用有一些切身體會,Web頁面的制作當然也不例外。比如:做一個網站,大部分頁面都是由頁頭、主體頁及版權頁組成。其中,頁頭及版權頁的內容是不變的,而每頁的主體內容頁則是不相同的。根據代碼重用的要求,我們不應該在每頁重寫頁頭及版權頁的代碼。Jsp也的確給我們提供了靜態和動態包含的方式讓我們來重用這些代碼,也就是通過

    <%@ include file=…%>




    <jsp:include page=…/>


    的形式來達到代碼重用的目的。但不幸的是:無論采用上述那種形式,都存在一些不盡如人意的地方。如,你如果用這些方式從事過國際化編程,你將會為字符集的問題搞得無所適從。為了解決這些問題,一個名為tiles的框架應運而生。所謂tile,其實就是網頁中的一個區域。Tiles框架有如下一些特點:

    具有模板能力

    能動態構建和裝載頁面

    屏幕定義

    對tile和布局的重用支持

    支持國際化

    從tiles框架的發展歷史來看,它開始并不是struts的組成部分。正如我們在本系列的第一篇所說的那樣:"它對其他技術和框架顯示出很好的融合性"。現在,它已經成為struts的基本組成部分之一。

    2、在struts中使用tiles框架的條件

    首先,確保如下一些文件在應用程序的WEB-INF/lib目錄中:

    commons-digester.jar
    commons-beanutils.jar
    commons-collections.jar
    commons-logging.jar


    其次,還要將tiles的tld文件struts-tiles.tld以及struts-template.tld放在應用程序的WEB-INF目錄中。這里順便對本系列前面一些文章中讀者提出的問題做一些解釋:

    本系列文章的每個選題都是根據筆者在論壇中收集的一些熱點問題,結合自己開發的一些項目(有很多就是為了便于初學者的理解將實際項目做一些適當的簡化)寫成的。因為對那些包之類的文件對那個主題是必須的往往沒有足夠的時間來一一加以驗證,有時寫多了,有時又寫掉了。

    所以,有些讀者反映照著文章介紹的步驟不能得到正確的結果。首先,在此向這些讀者表示歉意,筆者以后會盡量注意一些。說實在的,要完全避免也有困難,畢竟寫這些東西只是業余的事情,筆者還有許多本職工作要干,請大家原諒。有一個折中的方案就是:讀者在明白基本原理之后采用諸如jbx之類的開發工具,這樣在很大程度上可以避免這些問題的干擾,畢竟正常開發大多還是要使用這些工具的,熟悉它們也沒有什么壞處。

    3、使用tiles構建網頁的過程

    下面,我們通過構建一個本篇開頭提及的那種簡單頁面來體會一下tiles構建網頁的過程。

    首先,在struts-config.xml中加入tiles插件,代碼如下:









    <plug-in className="org.apache.struts.tiles.TilesPlugin">
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
      </plug-in>


    其次,創建tiles-defs.xml文件,并把它放在應用程序的WEB-INF目錄下,其代碼如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE tiles-definitions PUBLIC "-
    //Apache Software Foundation
    //DTD Tiles Configuration 1.1
    //EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
    <tiles-definitions>  
      <definition name="testLayout" path="/testLayout.jsp">
        <put name="title" value="my tiles test" />
        <put name="header" value="/header.jsp" />
        <put name="body" value="/body.jsp" />
        <put name="footer" value="/right.jsp" />
      </definition>
    </tiles-definitions>


    再次,創建一個名為testLayout.jsp的布局模板文件,代碼如下:

    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
    <html>
    <head>
    <title><tiles:get name="title"/>
    </title>
    </head>
    <body>
      <table>
        <tr>
          <td height="80" width="778" bgcolor="#aa0000">
            <tiles:insert attribute="header"/>
          </td>
        </tr>
        <tr>
          <td height="360" width="778" bgcolor="#00aa00">
            <tiles:insert attribute="body"/>
          </td>
        </tr>
        <tr>
          <td height="80" width="778" bgcolor="#0000aa">
            <tiles:insert attribute="footer"/>
          </td>
        </tr>
      </table> 
    </body>
    </html>


    從該文件的代碼可以看出:

    <tiles:insert 標簽中的attribute屬性值
    是由tiles-defs.xml中定義的邏輯名來表示的


    這為基于該模板的網頁動態地裝入tile奠定了基礎。最后,創建幾個用于實驗的.jsp文件,它們包括header.jsp、body.jsp、body2.jsp以及right.jsp。

    header.jsp的代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <html>
    <head>
    <title>
    header
    </title>
    </head>
    <body bgcolor="#ffffff">
    <h1>


    這是頁頭部分

    </h1>
    </body>
    </html>


    body.jsp的代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <html>
    <head>
    <title>
    body
    </title>
    </head>
    <body bgcolor="#ffffff">
    <h1>


    這是內容部分

    </h1>
    </body>
    </html>


    body2.jsp的代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <html>
    <head>
    <title>
    body
    </title>
    </head>
    <body bgcolor="#ffffff">
    <h1>


    這是內容部分2

    </h1>
    </body>
    </html>


    right.jsp的代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <html>
    <head>
    <title>
    right
    </title>
    </head>
    <body bgcolor="#ffffff">
    <h1>


    這是版權頁

    </h1>
    </body>
    </html>

    4、演示tiles的使用效果

    為此,我們還要建兩個.jsp文件,它們分別名為:page1.jsp和page2.jsp

    其中,page1.jsp的代碼如下:











    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <tiles:insert page="/testLayout.jsp" flush="true">
      <tiles:put name="title" content="My first page" direct="true"/>
      <tiles:put name="header" value="/header.jsp"/>
      <tiles:put name="body" value="/body.jsp"/>
      <tiles:put name="footer" value="/right.jsp"/>
    </tiles:insert>


    page2.jsp的代碼如下:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <tiles:insert page="/testLayout.jsp" flush="true">
      <tiles:put name="title" content="My second page" direct="true"/>
      <tiles:put name="header" value="/header.jsp"/>
      <tiles:put name="body" value="/body2.jsp"/>
      <tiles:put name="footer" value="/right.jsp"/>
    </tiles:insert>


    從這兩個文件可以看出:

    文件的布局是與模板相對應,而這兩個文件的body部分則對應著不同的.jsp文件。可以想象,如果要對頁頭和版權信息做修改,只要對header.jsp和right.jsp做相應的修改,則修改的結果則會反映到page1.jsp和page2.jsp頁面上。

    以上,只是對tiles的使用做了一個簡單的介紹,它還有其他一些特征如:tile的定義可以擴展等等,值得大家深入探討。至于上面各種文件中出現的一些標簽,大多可以從標簽本身看出其含義,實在不清楚的也可以參考這方面的有關資料,如果詳細在這里講解這些東西會顯得冗長乏味。

    現在,如果您在瀏覽器中輸入:http://127.0.0.1:8080/mystruts/page1.jsp就可以看到網頁效果了;對比輸入:http://127.0.0.1:8080/mystruts/page2.jsp 看看網頁的變化。就可以體會到使用tiles框架的作用了。

    下一篇文章,筆者準備介紹一下用tiles框架構建frame形式的網頁的問題。之所以準備寫它們是因為frame形式的網頁應用還是比較廣泛,而且筆者發現這方面的參考文獻比較少見。另外,本系列第八篇發表后,就有讀者來信提出過這樣的要求,希望整理出來的東西能對這部分讀者有所幫助。

    參考文獻:

    《Programming Jakarta Struts》Chuck Cavaness著
    主站蜘蛛池模板: 国产aa免费视频| 亚洲精品线在线观看| 国产一级一毛免费黄片| 亚洲一卡2卡三卡4卡有限公司| 午夜性色一区二区三区免费不卡视频| 亚洲AV无码一区二区一二区 | 午夜视频免费成人| 一个人晚上在线观看的免费视频| 亚洲天堂男人天堂| 日本不卡免费新一二三区| 久久九九全国免费| 亚洲中文字幕无码亚洲成A人片| 亚洲精品无码99在线观看 | 在线涩涩免费观看国产精品 | 456亚洲人成影院在线观| 亚洲男人第一无码aⅴ网站| 亚欧在线精品免费观看一区| 羞羞视频免费网站入口| 1区1区3区4区产品亚洲| 亚洲国产成人久久精品99| 91香蕉在线观看免费高清| 免费人成网站永久| 亚洲免费电影网站| 亚洲熟妇无码乱子AV电影| 成人黄软件网18免费下载成人黄18免费视频| 一级**爱片免费视频| 中文字幕亚洲综合小综合在线| 中文字幕亚洲天堂| 永久免费毛片手机版在线看| 久操免费在线观看| 一区二区三区免费电影| 亚洲精品无码日韩国产不卡av| 亚洲av无码国产精品色午夜字幕 | 黄网站色在线视频免费观看| 亚洲免费日韩无码系列| 亚洲人av高清无码| 亚洲三级在线免费观看| 亚洲国产成人久久综合碰碰动漫3d| 四虎影库久免费视频| 成人性生交大片免费看午夜a| 最近中文字幕完整免费视频ww|