你好,Shale: 剖析 Shale 應用程序

發表于:2007-05-24來源:作者:點擊數: 標簽:你好Shale應用程序剖析
通過對框架的應用目錄結構的詳細分析,Brett McLaughlin 繼續深入介紹 Shale。利用 本系列第一篇文章 中介紹的 Shale starter 應用程序,Brett 詳細地為您介紹從 src/ 到 dist/ 的核心目錄。本文介紹了 Shale 庫的存儲方式,定制文件的放置位置以及在何處向 S
通過對框架的應用目錄結構的詳細分析,Brett McLaughlin 繼續深入介紹 Shale。利用 本系列第一篇文章 中介紹的 Shale starter 應用程序,Brett 詳細地為您介紹從 src/ 到 dist/ 的核心目錄。本文介紹了 Shale 庫的存儲方式,定制文件的放置位置以及在何處向 Shale 應用程序插入專門的行為。在本文中,他給您提出一些關于管理 Shale 目錄的重要建議,并且讓您從一個示例應用程序(基于 Shale starter 應用程序)開始學起,該示例應用程序將作為本系列其余文章討論的基礎。

這個分為五部分的系列的第一篇文章 中,我介紹了 Shale 并解釋了它與它的前一代 Struts 的不同之處。文中介紹了 Shale 的理論基礎并為您演示了如何安裝和設置開發環境。還討論了 Shale 可能存在的一些弱點 —— 也就是它是一個正在發展中的產品 —— 但我們也得出了結論,對于那些愿意隨其不斷改進和學習的開發人員來說,Shale 是一個很有前途的新開發框架。

在本文中,我把改進與學習這一項放到測試中,同時對 Shale 應用程序進行徹底深入的分析。本文首先重新探討 Shale 所謂的 starter 應用程序(您將很快發現,這實際上是一個模板),以便您能確切地了解它為 Web 應用程序開發帶來的好處。使用 starter 應用程序構建您自己的示例應用程序,然后使用它們瀏覽許多構成最基本的 Shale 應用程序的文件和目錄。在本文中,我將為您說明把 JSP 和 Java™ 類放在何處并解釋 Shale 是如何簡化構建功能全面的、定制的 Web 應用程序的過程。

本文中的大多數討論以本系列第一篇文章介紹的知識為基礎。如果您還未曾閱讀那篇文章,您應該 立即閱讀。

開始使用 Shale

正如您在上一篇文章中學到的,開始構建 Shale 應用程序的最容易的方法就是以 Shale starter 應用程序作為模板,然后在此基礎上進行修改。因為本文非常需要您進行實際操作,因此現在您首先要做的是啟動該 starter 應用程序。學習 starter 程序中的各種組件(通過應用程序的目錄結構)及其協同工作的方式對稍后談到的創建自己的 Shale 應用程序很有幫助。

嗨,那是一個模板!

實際上如果沿用 Hello World 的說法,與其說 Shale starter 應用程序是 “starter 應用程序” 不如說是一個模板。該模板確實能幫助您開始使用 Shale 開發應用程序。它提供了能輕松擴展您自己的 Shale 應用程序的基本設置,還考慮到了您可能需要的所有常規依賴 JAR 文件??紤]與 Shale 一起提供的 starter 應用程序時,應把它視為一個可作為開發基礎的模板,而不是一旦能夠輕松使用 Shale 后就不再使用的示例應用程序。

實際上,使用 starter 應用程序開始 Shale 應用程序開發項目 是一個好主意。我在上一篇文章中說明了設置 Shale starter 應用程序的過程,本文假定您已完成了那些基礎工作。您應該已經把 Shale starter 應用程序復制到開發環境中稱為 “first-shale” 的目錄中。first-shale 目錄中的代碼是您個人的 starter 應用程序,您將使用它們了解所有的 Shale 應用程序結構。

核心目錄結構

假定您已經從 Shale starter 應用程序復制了自己的應用程序(first-shale),查看一下應用程序的目錄結構。您將看到許多文件。如果不能確定每個組件、文件和目錄的具體用途,應用程序能夠顯示出一些它們的主要用處 —— 至少在開始時。圖 1 顯示的是目錄結構;如您所見,starter 應用程序中有許多文件:


圖 1. Shale starter 應用程序目錄結構
Shale starter 應用程序目錄結構

首先從展開 Shale starter 應用程序目錄結構開始。

與構建有關的文件

starter 應用程序根目錄下的前兩個文件是 build.xml 和 default.properties。如果您使用過 Ant 構建環境,應該對第一個文件比較熟悉??傮w來說,build.xml 告知 Ant 做什么。就 Shale starter 應用程序而言,它使 Ant 了解編譯哪些文件以及如何創建 WAR 分發和 servlet 引擎(本文稍后深入討論)所用的文件。

default.properties 文件是用來指定幾個 Shale 的依賴項的模板。是的,這就意味著在模板應用程序(Shale starter 應用程序)中有一個模板文件(default.properties)。由于本系列(參見 參考資料)第一篇文章已介紹了 default.properties,故這里不再討論相關細節。大體上,把該文件復制為名為 build.properties 的新文件,對特定于環境的部分進行更改,然后使用 Ant 構建項目。在 Ant 運行時,它使用 build.properties 中指定的位置來創建 Shale 分發。

依賴目錄

接下來看見上面有兩個空目錄: ext/ and lib/。特意將其留空,不要以為您丟失了什么。構建 Shale Web 應用程序、設置 build.properties 文件時,您必須指出 Shale 框架和 servlet 引擎應該到哪里查找依賴項。實際上,可以指定兩種類型 的依賴項:

  • 應用程序在編譯時和運行時需要的 JAR 文件。這些文件應該是應用程序 WAR 文件的一部分并位于 Web 應用程序的 WEB-INF/lib/ 目錄中。

  • 應用程序在編譯時而不是 運行時所需的 JAR 文件。這種情況通常是在運行時 servlet 容器提供一組庫,但在編譯應用程序時需要用到它們。不應該在 Web 應用程序的 WAR 文件中包含這種文件,因為容器將運行時提供該類文件。

build.properties 文件提供一個指定運行時依賴項(使用 lib.dir 屬性)和不應該存在于運行時 WAR 部署配置(使用 ext.dir 屬性)中的編譯時依賴項的途徑。如果愿意,您可以僅把依賴項放置在如下目錄中:

  • 運行時依賴項放在 lib/ 目錄下
  • 僅編譯時依賴項放在 ext/ 目錄下

這兩個空目錄是專門為此而提供的。

文檔

LICENSE.TXT、NOTICE.txt 和 README.txt 是簡單的文檔文件。這些文檔詳述了能夠使用 Shale 的條件和能夠對框架做哪些修改。它們也對設置和構建 Shale 應用程序提供簡單的指導。這些文件值得閱讀一遍,但是讀過一遍以后,您可以忽略它們。

源代碼

最后一個名為 src/ 的目錄應該比較容易理解:它包含 Shale starter 應用程序的源代碼。該目錄包含的文件并不多,但有許多子目錄。因此,它的結構看起來比實際復雜。圖 2 顯示了完整的、展開的源代碼目錄結構:


圖 2. 源代碼目錄結構
Shale starter 應用程序的源代碼目錄有許多子目錄

下面仔細分析一下這些子目錄:

  • conf/ 包含一個文件 —— MANIFEST.MF,為應用程序生成 WAR 文件時,構建進程將定制和使用該文件。在典型的應用程序開發周期中,您不需要使用和修改該文件。

  • java/ 實際上只包含在 starter 應用程序中使用的類。org.apache.shale.blank.WelcomeBean 是一個演示如何將 Shale 與 Beans 一起使用的簡單 JavaBean。更為重要的是,它指示能把 Java 文件放置在 starter 應用程序中的何處。構建 starter 應用程序時,ANT 將自動編譯 java/ 目錄下的所有 Java 代碼。因此,如果您添加自己的代碼,可以把代碼放在 java/ 目錄(目錄結構等等)下,Ant 編譯這些代碼并把它們包含在應用程序的構建中。

  • test/ 和 systest/ 只包含能確保 starter 應用程序構建和運行正確的測試。除非您要處理 Shale 框架或 starter 應用程序本身,否則它們與您沒有太大關系。

  • web/ 包含在 starter 應用程序中使用的 JSP??梢园涯朐趹贸绦蛑邪娜魏?JSP 添加到該子目錄,它們將被添加到構建中。

很明顯,大多數令人感興趣的 Shale starter 的組件位于 src/ 目錄下。開發愈加復雜的 Shale 應用程序時,您的 src/ 目錄將裝滿您自己的 Java 類和 JSP。因此要習慣于在 Shale starter 應用程序的 src/ 目錄結構下工作;您將發現這在應用程序開發中會非常有用。





回頁首


創建應用程序

一旦很清楚 starter 應用程序的最初目錄結構,您將深入分析構建 Shale 應用程序時它是什么樣子。 在上一節,您看到了 Shale 應用程序的源代碼位于何處。在本節中,將學習如何把源代碼構建到 Web 應用程序中以及把所有已編譯的 Java 文件、JSP 頁面和相關的依賴項放置在何處。

在創建過程中,您將很好地理解如何部署 Shale 應用程序以及可以在何處修改標準部署選項。您也會知曉在何處添加用于附加插件或想要和 Shale 代碼一起使用的依賴項的庫。

構建 starter 應用程序

回顧一下上一篇文章中介紹的 starter 應用程序的構建方式,下面讓我們簡單回顧一下:

  1. 把 default.properties 復制為一個新文件,將新文件命名為 build.properties。
  2. 打開 first-shale/ 目錄下的 build.properties 文件,對特定于您的系統的內容進行編輯。
  3. 在命令行提示符下鍵入 ant,從而使用 ant 構建應用程序。

添加到源代碼樹

前面已經提到過,您可以輕松地把自己的 JSP 添加到 Shale starter 應用程序的 src/web/ 目錄中。該目錄中的所有 JSP 都將自動添加到構建進程中。Java 源文件也是如此。src/ 目錄中有一個名稱為 java/ 的子目錄。只需要把 Java 源文件放在該目錄下,它們將作為構建進程的一部分被編譯。

如果您還不太相信使用 Shale starter 應用程序的價值,構建進程應該能證明它非常有用。通過編輯單個文件 —— build.properties —— 您可以構建自己的應用程序,而且毫不費力。即使在使用 Ant(用于 Shale starter 應用程序的構建系統)時,也必須設置所有的目錄、依賴項和構建 Web 應用程序需要的規則。但使用 Shale starter 應用程序,可以把時間精力用在編寫 JSP 和 Java 類上,將文件拖放到正確的位置,鍵入 ant 即可。

當提到放置 Java 類文件時,通常來說,應使用與 Java 類的包結構相匹配的目錄結構。例如,如果類名稱為 Song,該類在包 com.nathanson.music 中,則應把 Song.java 文件放在 src/java/com/nathanson/music 目錄結構中。這不會改變 Java 編譯文件的方式 —— javac 只查看 Song.java 頂部的 package 指令 —— 但這是一種良好的代碼組織結構。

源代碼與二進制代碼的對比

切記,源文件(或源代碼)指的是 .java 文件而不是 .class 文件。通常,.java 文件稱為源代碼,已編譯的 .class 文件則稱為二進制 代碼。Shale 的 src/ 目錄是用來放置源代碼的地方。target/ 目錄(下面將予以介紹)是用來放置二進制代碼的地方。

target/ 目錄

只要運行 ant 并構建應用程序,就能看到一個名為 target/ 的新目錄。該目錄包含從 src/ 目錄的源代碼構建而來的所有文件。實際上,target/ 目錄包含 “分解的 WAR”。WAR 文件只是 JAR 文件和一些額外的配置信息,以一種所有 Servlet 容器都能在里面部署應用程序的方式構建。如果取出一個 WAR 并展開它 —— 即解壓縮,最終將得到 target/ 目錄下的一個目錄結構。(我馬上解釋 WAR 文件的實際創建方式。)

了解 Shale 應用程序源文件位置的最好方法是查看 starter 應用程序的 src/ 目錄。同樣地,理解一個已部署的 Shale 應用程序的形式的最佳方法就是查看 target/ 目錄。首先,我解釋在構建過程中 Shale 將各種文件放置在何處,然后為您演示如何設置它以部署應用程序。

target/ 目錄內部

啟動 Ant 后,打開已創建的新 target/ 目錄。該目錄下的內容如圖 3 所示。


圖 3. target/ 目錄
target/ 目錄

該圖中很多內容看起來與在前面 圖 2 中展示的 src/ 目錄結構相似。像在 src/ 目錄中一樣,您可以看出標準 Web 應用程序結構,包括 Java 類和 JSP 頁面。但文件順序有些變化,而且增加了幾項內容。

主應用程序目錄

target/ 目錄的所有內容幾乎都位于名為 first-shale/ 的子目錄中。如果您在 build.properties 文件中指定了一個不同的項目路徑,在您的系統上該目錄名稱可能有所不同。不管它的名稱是什么,清單 1 顯示用于構建應用程序的文件:


清單 1. build.properties 文件示例
# Basic project information
            project.copyright=My project, Copyright ?? 2006
            project.name=My First Shale Application
            project.vendor=IBM DeveloperWorks
            project.vendor.id=com.ibm.dw
            # Java package and context path for servlet engine
            project.package=com.ibm.dw.firstShale
            project.path=first-shale
            # Directory for Shale distribution - change this for your system
            shale.dir=/usr/local/java/shale-framework-20060204
            # Directory for all your libraries - change this for your system
            lib.dir=/usr/local/java/shale-framework-20060204/lib
            

可任選名稱作為項目路徑。Shale 構建腳本(使用 Ant)直接使用您為它在 target/ 下創建的目錄所指定的名稱。

manifest 文件

本文其余部分主要關注 target/ 目錄中的內容 —— 但深入學習之前,您應該了解直接在 target/ 下創建的目錄的內容。META-INF/ 目錄只包含一個名為 MANIFEST.MF 的文件,如清單 2 所示:


清單 2. MANIFEST.MF 文件
            Extension-Name: com.ibm.dw.firstShale
            Specification-Vendor: The Apache Software Foundation
            Specification-Version: 1.0
            Implementation-Vendor-Id: com.ibm.dw
            Implementation-Vendor: IBM DeveloperWorks
            Implementation-Version: 0.1
            

將該文件的內容與 清單 1 和輸入 build.properties 文件中的信息相比較,應立即能看出某種關聯。MANIFEST.MF 從 build.properties 獲得包名、項目供應商和項目供應商 ID,并把這些內容插入到該文件中。

使用 Shale 構建進程來構建部署到 servlet 引擎中的 WAR 文件時,該 manifest 文件將作為 WAR 的一部分包含進來,用它來確定內容。如果您使用任何 GUI 工具管理 servlet 引擎,這些工具能讀取 MANIFEST.MF 文件并讓您或其他系統管理員了解 WAR 中包含什么。

通常,不應該手動更改 MANIFEST.MF;實際上,如果需要修改它的值,則應該更新 build.properties 并且重新構建應用程序。如果您想獨立地更改 MANIFEST.MF —— 而不更改 build.properties —— 然后重新構建項目,所有更改都將會丟失。通過使用 build.properties 控制 target/ 目錄中的所有內容以及控制 src/ 目錄中的所有內容,能夠確保您的可部署的應用程序總是與開發完成的源代碼和 build.properties 中為該代碼編寫的信息一致。

兩個 META-INF/ 目錄

實際上,在 target/ 結構下有兩個不同的 META-INF/ 目錄。target/META-INF/ 包含 manifest 文件,該文件用來創建整個 Web 應用程序的 WAR 文件。target/first-shale/META-INF/ 包含許可證和能提供一些關于 Shale 應用程序基本信息的說明文件。當心不要把這兩個文件混淆。它們雖然名稱相同,但沒有其他任何共同之處。

典型 Web 應用程序

如果您編寫過任何類型的 Web 應用程序 —— 不管它是使用像 Struts 這樣的框架還是單獨編寫 JSP 和 Servlet 代碼 —— 應該已經熟悉了 Web 應用程序的基本結構。您在 target/first-shale/ 目錄下能夠看到同樣的結構,看到像 META-INF/ 和 WEB-INF/ 這樣的目錄不應感到很驚奇。

包含在 src/web/ 目錄下的所有 JSP 文件現在都放入 Web 應用程序的根目錄中。您看 index.jsp、 welcome.jsp 和 messages.jspf — 在 src/web 目錄下的三個 JSP 和 與 JSP 相關的文件 — 都直接位于 target/first-shale/ 目錄下。

根目錄(first-shale/)是所有 JSP 文件的所在;但若需要向應用程序添加更多的 JSP,不要 只是把它們放到該目錄下。應該把附加的 JSP 放置在 src/web/ 目錄下,然后重新構建應用程序。如前所述,Shale 編程(對于任何 Web 編程都一樣)能實現的一個重要功能就是使源代碼樹和部署樹保持同步。只要在 src/ 目錄結構中進行所有更改,就不會有任何問題。

定位 Java 類

Java 類位于 target/first-shale/WEB-INF/classes/ 目錄結構中。這是任何 Web 應用程序中 Java 類的標準位置,因此不應對它感到驚奇。您能在該結構中找到所有已編譯的 Java .class 文件,這些文件嵌套在與包結構相匹配的目錄結構中。因此在 org.apache.shale.blank 包中的 WelcomeBean 類文件,是位于 classes/org/apache/shale/blank 目錄結構中的 WelcomeBean.class。

與源代碼與二進制代碼之間的分離相一致,在 classes/ 目錄結構中沒有 .java 文件 —— 這里不應該有!實際上,只有已編譯的 Java 文件存在;像 JSP 一樣,應該把新的 Java 源文件放在 src/ 目錄中的 java/ 子目錄下,并且讓 Shale 構建腳本編譯 Java 代碼。

構建腳本還會把 src/java/ 目錄結構中的屬性文件復制過來;例如,target/ 目錄中有 Bundle.properties(參考前面的 圖 3),該文件位于 src/java/ 目錄下。這允許您把 Java 類可能需要的文件與 Java 源文件放在一起,從而可在應用程序構建結構使用它們。

大量的依賴項

target/first-shale/WEB-INF/ 下的 lib/ 目錄包含應用程序運行需要的所有庫。前面已經提到,Shale 有大量的依賴項:

  • Java Runtime Environment (JRE) 和 Java Development Kit (JDK) 1.4 或更新版本(包括 Java 5.0)
  • Java Servlet API 2.4 或更新版本
  • JavaServer Pages (JSP) 2.0 或更新版本
  • JavaServer Faces (JSF) 1.1 或更新版本
  • JSTL (JSP Standard Tag Library) 1.1 或更新版本
  • Jakarta Commons BeanUtils 1.7 或更新版本
  • Jakarta Commons Chain 1.0 或更新版本
  • Jakarta Commons Digester 1.7 或更新版本
  • Apache Logging 1.0.4 或更新版本
  • Apache Ant 1.6.3 或更新版本

Shale starter 應用程序的一個重要特性是在構建期間它為您照管這些依賴項?,F在不詳細介紹這些依賴項的功能。您將在特定的編程任務或上下文中學習它們。但要注意,其余部分的討論假定您使用過 starter 應用程序并且已經擁有全部依賴項。如果您嘗試從頭開始構建 Shale 應用程序 —— 不使用 starter 應用程序作為模板 —— 則需要您自己添加所有的依賴項。這正是總是使用 Shale starter 應用程序開始開發的另一原因。

刪除 JAR 文件

如果您不打算使用 Shale 的一些可選功能,可以刪除特定功能的 JAR 文件。例如,如果您不打算將 Shale 與 Tiles 框架配合使用,可以刪除 WEB-INF/lib/ 目錄中的 shale-tiles.jar。但刪除 JAR 文件沒有任何好處(或許能節省一點點部署好的 WAR 文件中的空間),因此刪除 JAR 文件不是一個好主意。保留這些文件可以保證在您確實 決定使用 Tiles 和任何其他需要 JAR 文件的附加功能時,能夠滿足需求。

在 starter 應用程序中,您在 WEB-INF/lib/ 目錄下找到依賴項,它們均為 JAR 文件。同樣,這也是 Web 應用程序中 JAR 文件的標準位置,因此不應該對它感到驚奇。您還能找到實際 Shale 庫 —— shale-core.jar —— 以及幾個使 Shale 能與其他框架(例如,Spring (shale-spring.jar)、Clay (shale-core.jar)、Tiles (shale-tiles.jar)和 Java 5.0 Tiger (shale-tiger.jar))協同工作的 Shale 插件。換言之,您已經擁有了使用 Shale 開發 Web 應用程序所需的所有庫。這很容易,不是嗎?

部署應用程序

我們已經編寫好了源代碼并構建了應用程序。完成這兩步之后,所得到的結果是一個包含將應用程序部署到 servlet 引擎中所需全部文件的目錄結構(first-shale/ 主目錄下的 target/ 目錄)。但是,保持所有這些文件并復制整個目錄并不方便,也不安全。幸運的是,Shale 提供了一種部署應用程序的簡便方式。

構建 WAR 文件

上篇文章介紹了 WAR 文件的構建方法,簡要回顧如下:

  1. 打開 build.xml 文件,按 上一篇文章 中的介紹更改 “javadoc” 任務。
  2. 運行 ant dist。

完成這些步驟,即可得到一個新目錄,名為 dist/。該目錄中的內容如圖 4 所示:


圖 4. 構建后的 Shale starter 應用程序
運行 Ant 后將創建一個新目錄

這里最值得注意的文件是 first-shale-0.1.war,它是根據 build.properties(如前面 清單 1 所示)中提供的值命名的。dist/ 目錄還包含與 Shale 和源代碼相關的許可和自述信息。在您需要把整個應用程序移動到其他計算機上( 例如其他開發服務器或工作站)時,這使您可輕松地將整個 dist/ 目錄打包為一個 ZIP 文件。但在許多情況下,您只會在一臺計算機上開發應用程序,因此您最感興趣的是 WAR 文件。

部署 WAR 文件

有了 WAR 文件后,實際部署應用程序是件很容易的事。獲取文件并把它們放在 Servlet 引擎為 Web 應用程序提供的目錄中即可完成部署。通常該目錄的名稱形式為 webapps/。然后 Servlet 引擎展開 WAR 文件(得到您在 target/ 中看到的目錄結構)并部署應用程序。這時,就得到了可供使用的應用程序。





回頁首


結束語

在本文中,我們剖析了 Shale 應用程序。您以一個 Shale 應用程序為背景學習了各目錄的用途 —— 以及幾乎每個目錄下的每個文件 —— 從構建到部署應用程序?,F在,您應清楚地了解了 Shale Web 應用程序源代碼目錄和最終展開的 WAR 文件的內容。

在閱讀我的下一篇文章之前最好自行練習實踐。如果您有一個想要將其轉換為 Shale 的 Web 應用程序,那么完成它。從將其所有的 JSP 和 Java 文件移動到 Shale 目錄結構開始。只需記住將所有的 JSP 放在 src/web/ 目錄下,將所有的 Java 類嵌套入 src/java/ 目錄中。隨后即可構建并部署應用程序了。

的確,單純的目錄剖析與 Shale 組件的實際使用并不一樣,但您在使用 Shale 應用程序基礎設施,這是邁往正確方向的重要一步。(非常重要,所以我用一整篇文章解釋 Shale 在何處放置源代碼和部署形式的文件。)在下一篇文章中,我將進一步為您演示如何編寫與 Shale 交互的代碼。我將從 JSP 開始,然后介紹一些可以用于 JSP 頁面的 Shale 相關標記。迄今為止,我介紹的還只是一些淺顯的 starter 應用程序方面的知識。做出更改并完成們測試 —— 一定要使源代碼樹與部署樹保持同步!

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97