這篇文章解釋了與門戶有關的一些基本的模版思想,介紹了Struts對于模版的支持,圍繞著Struts模版標簽進行了討論。本文還闡述了其他的一些模版機制。
獲得Struts
網絡應用程序框架使用MVC模式,能簡化網絡站點的開發。Struts正是這樣的一個框架。它提供了類集、標簽庫和一些能作為Web開發基礎的接口。Struts是Jakarta-Apache論壇下的一個開源項目。
和所有Jakarta的項目一樣,Struts提供原代碼和二進制程序的下載。這篇文章里,我們使用Struts的1.1b2版本。雖然這不是一個正式的版本,但這個版本比起1.0.2版有許多重大的改進。
首先,解壓縮二進制程序到你所指定的目錄。會有一個名為jakarta-struts-1.1-b2的目錄創建。在它之下有兩個子目錄,分別為lib和webapps。Lib目錄包含我們所需要的所有庫、DTD文件、TLD文件(標簽庫定義),我們需要把它們添加到應用程序的classpath中。Webapps目錄包含了許多.war(web程序包)文件。這些可安裝運行的war文件可以放到任意servlet容器的webapps目錄中。我們使用Tomcat作為servlet容器。
模板基礎
我們通過模版可以創建很多結構相似的東西。模版幫助我們將會改變的東西歸檔打包,避免許多重復的工作。這對創建網絡應用程序的確是一件很方便的事情。
在大多數的網絡應用程序中,經常需要更換的是內容。jsp很輕易做到這一點。因為JSP默認提供一個include機制—— 用java提供的布局治理機制可以幫我們更形象的理解這些問題。Java提出了布局治理器、組件、容器的概念來創建圖形界面的應用程序。 當容器中的組件改變時,布局治理器會決定怎么樣將新的組件部署到容器中。此外,容器本身也可以做為其他容器的組件從而實現了嵌套。在一些簡單的情況下,JSP就可以做為一個網絡應用程序的模版,其功能就等價于布局治理器。模版隱藏了web頁面布局的實現方法。換句話說,它隱藏了布局的法則。假如布局法則需要改變,那么這些改變將回受限于模版。Web頁面通過實現這個模版來做其內容上的改變。 假如模版等價于布局治理器,那相應的容器和組件又是什么呢?相應的組件就是實際的內容文件:JSP文件、Html文件、圖象文件等等。容器將這些可見的組件聚集在一個單元里。一個JSP文件就是一個容器。容器需要關于模版的信息來部署這些組件。用Java GUI舉例來說,一個面板(容器,集合單元)可以包含按鈕和文本區(組件和內容),使用一個網格布局治理器(GridLayout)來部署這些組件。 現在我們可以往返答先前提出的那個問題了。我們知道模版集成了布局法則,當要改變布局是,我們要做的僅僅改變模版。這些改變會一起相關頁面布局的改變,而不需要去改變這些頁面本身。在門戶應用程序中,這就意味著當大量頁面需要采用同樣布局時在時間上的節省。 Struts用三個模版標簽來實現模版。 插入標簽InsertTag—— 在容器/集合單元文件(collecting unit file)中使用。它定義了當前容器要使用的模版。類似于Java GUI中的container.setLayout(layout)方法。在它之后用 放入標簽PutTag—— 在容器/集合單元文件(collecting unit file)中使用。他定義了組成容器/集合單元的組件/內容。它類似于Java GUI中的container.add(component)方法。每個PutTag標簽必須有一個相關組件的名稱。 獲得標簽GetTag—— 在模版文件中使用。它告訴模版由PutTag標簽定義的不同組件的名稱。它類似于Java GUI中的layout.addLayoutComponent(componentName, component)方法。 一個簡單的例子 你可以下載這個例子。我們將要創建兩套內容文件、容器(集合單元)文件以及模版文件。當我們有了這些文件后,就可以就可以互換他們的模版,看到他們在布局上的改變。 復制Struts-blank.war到Tomcat的webapps目錄并且將他改名為template-example.war。重起Tomcat。template-example會由Tomcat自動部署。刪除pages目錄和index.jsp文件。他們與我們的討論暫時無關。 讓我們定義又定義我們自己的內容文件做為一個開始。在template-example下建立一個名為content的目錄,并且在其中創建六個文件:top1.htm, top2.htm, bottom1.htm, bottom2.htm, middle1.jsp, and middle2.jsp。 放入什么文件是取決于你的,但是對于初學者,靜態的.htm文件更輕易理解。舉個例子來說,top.htm包括以下的內容: This is the TOP Content for the First example. This is a static html file.
新聞熱點
疑難解答