Java Web應用程序的規范目錄結構
一、 Java Web應用程序必須使用規范的目錄結構:
– 應用程序根目錄
– |-- WEB-INF目錄:必須目錄
– |-- web.xml:Web應用部署描述文件,必須目錄
– |-- classes目錄:存放字節碼文件
– |-- lib目錄:存放第三方類庫文件
– |-- TLD文件:標簽庫描述文件
– |-- 其他靜態文件:HTML、CSS、JavaScript、圖片等
二、 開發Java Web應用程序的大致流程
– 設計目錄結構:根據具體業務需要,遵照規范的目錄結構設計好Web應用程序的目錄結構。
– 編寫Web應用程序代碼:編寫業務邏輯所需的Java代碼。
– 編寫部署描述文件:把Servlet、初始化參數等定義到部署描述文件web.xml中。
– 編譯代碼:把編寫好的Java源代碼編譯成字節碼。
– 將Web應用程序打包:把整個Web應用程序打成War包,以方便部署。
– 部署Web應用程序:把打好的War包部署到Web服務器上。
– 執行Web應用程序:啟動Web服務器,利用客戶端瀏覽器進行訪問測試。
注意:在具體的開發過程中,一般都會使用IDE工具,使用IDE工具進行Web應用程序開發時,只需要開發人員完成前三個步驟,其他步驟IDE工具可以自動完成。
三、Servlet是用Java編寫的Server端程序,它與協議和平台無關。Servlet運行於Java服務器中。
四、Java Servlet可以動態地擴展服務器的能力,並采用請求-響應模式提供Web服務。
五、Servlet是使用Java Servlet應用程序設計接口及相關類和方法的Java程序。它在Web服務器上或應用服務器上運行並擴展了該服務器的能力。Servlet裝入Web服務器並在Web服務器內執行。
六、Servlet是以Java技術為基礎的服務器端應用程序組件,Servlet的客戶端可以提出
七、請求並獲得該請求的響應,它可以是任何Java程序、瀏覽器或任何設備。
當Web服務器接收到一個HTTP請求時,它會先判斷請求內容——如果是靜態網頁數據,Web服務器將會自行處理,然后產生響應信息;如果牽涉到動態數據,Web服務器會將請求轉交給Servlet容器。此時Servlet容器會找到對應的處理該請求的Servlet實例來處理,結果會送回Web服務器,再由Web服務器傳回用戶端。
--yourproject
--src
--java 運行的java源代碼
--test 單元測試的源代碼
--configs 配置文件
--lib 開發需要的lib(里面通常是運行時不需要的jar)
--build.propertis (ant的)
--build.xml (ant)
--document (項目的設計文檔、數據庫設計文檔等)
--WebRoot
--WEB-INF
--classes
--lib (運行時需要的jar,當然開發肯定也需要該lib)
---web.xml
--dist (打成jar、war的存放路徑)
--css
--js
--view (模板文件 。jsp,mv)
--images
注:按照 Java EE 規范的規定,一個典型的Web 應用程序有四個部分:
1. 公開目錄
2. WEB-INF/web.xml 文件,發布描述符(必選)
3. WEB-INF/classes 目錄,編譯后的Java 類文件(可選)
4. WEB-INF/lib 目錄,Java 類庫文件(*.jar)(可選)
公開目錄存放所有可以被用戶的訪問的資源, 包括 .html, .jsp, .gif, .jpg, .css, .js, .swf等等。
WEB-INF 目錄是一個專用區域, 容器不能把此目錄中的內容提供給用戶。這個目錄下的文件只供容器使用, 里面包含不應該由客戶直接下載的資源, 例如: Servlet(這些組件包括應用程序邏輯以及對其他資源如數據庫的可能訪問), Web 應用程序中servlet 可直接訪問的其他任何文件, 在服務器方運行或者使用的資源(如Java 類文件和供servlet 使用的JAR 文件), 由您的應用程序生成的臨時文件, 發布描述符以及其它任何配置文件。這些資源是專用的, 因此只能由它們自己的Web 應用程序及容器訪問。特別地, JSP/Servlet 程序文件也能通過ServletContext 訪問到這個目錄下的文件, 例如JSP 中可以通過application.getRealPath(“/WEB-INF/web.xml”) 訪問到發布描述符文件的路徑。 Web 容器要求在你的應用程序中必須有WEB-INF 目錄。注意: 如果你的Web 應用程序中沒有包含這個目錄, 它可能將無法工作(這是因為不同的服務器對此情況的處理不甚一致,所以有時候也能工作)。
WEB-INF 中包含着發布描述符, 一個classes 目錄和一個lib 目錄, 以及其它內容。發布描述符(deployment descriptors)是J2EE Web 應用程序不可分割的一部分(也就是說是它的最小部分, 必不可缺的一部分)。它們在應用程序發布之后幫助管理 Web 應用程序的配置。對於 Web 容器而言, 發布描述符是一個名為web.xml 的XML 文件, 存儲在Web 應用程序的 /WEB-INF 目錄下。
發布描述符有多種用途:
• 為 Servlet 和Web 應用程序提供初始化參數 這使我們的Web 應用程序中的硬性編寫的代碼的初始化值更少。例如常見的<param-name>, <param-value>標記, 就可以為Servlet 提供參數, 這個參數可以在init() 方法中加載。 Struts 的ActionServlet也是通過這種方式來找到它們需要的配置文件struts-config.xml 的位置, 從而加載並分析它,來初始化Struts 框架用到的各種FromBean, Action, Forward 等。
• Servlet/JSP 定義可以為 Web 應用程序中的每個Servlet 或者預編譯的JSP 網頁提供定義。包括 Servlet/JSP 的名字, Servlet/JSP 的類以及一個可選的描述。
• Servlet/JSP 映射 Web 容器使用這些信息把進入請求映射到servlet 和JSP 網頁。
• MIME 類型由於每個 Web 應用程序可以包含多種內容類型, 因此我們可以在發布描述符中為每一種類型指定MIME 類型。
• 安全性 我們可以使用發布描述符來管理應用程序的訪問控制。例如, 可以指定我們的Web 應用程序是否需要登錄, 如果需要的話, 應該使用什么登錄頁面, 以及用戶會作為何種角色。發布描述符還可以用來自定義其他元素, 包括歡迎網頁, 出錯網頁, 會話配置。classes 目錄用於存儲編譯過的servlet 及其它程序類, 例如JavaBean。如果一個程序有打包的JAR 文件(例如一個第三方API 打包成了一個JAR 文件, 如Struts 框架的類庫
struts.jar, MySQL 的數據庫JDBC 驅動程序文件mysql-connector-java-3.1.11-bin.jar 等),那么它們可以被復制到lib 目錄中(如果解壓縮這些壓縮包的話, 請將它們復制到classes 目錄中)。 Web 容器使用這兩個目錄來查找servlet 及其他相關類,也就是說, 容器的類裝入器會自動查看classes 目錄, 以及lib 目錄下的JAR 文件。這就意味着你不需要明確的把這些類和JAR 文件添加到CLASSPATH 中。 Web 容器自動將這兩個目錄中的文件加入Web應用的類路徑中。
