概念一直是學習計算機軟件開發中常常遇到的問題,也是軟件行業最喜歡創造的東西。不少時候,學習計算機軟件開發遇到困難都是由於對某些概念的不理解,而不是由於技術自己有多麼複雜。Java Web做爲Java EE技術體系的一部分,應該是目前全部Web開發技術中最複雜的一種,不少初學者,或者是從ASP、PHP轉移過來的開發者都會遇到概念方面的困難。 其實不少概念都是非產簡單的,只是由於廠家爲了宣傳須要,將概念複雜化、學術化,致使學習者以爲這些概念很是深奧,難以理解。在這裏,咱們首先去澄清Java Web開發中幾個經常使用的基本概念。固然理解這些概念的前提是須要你具有必定的計算機系統、面向對象等方面基礎知識。 1、Web容器 全部的程序運行都須要有一個必要的運行環境。這個環境能夠是軟件,也能夠是硬件,或者是軟件和硬件的結合。好比說Windows操做系統須要運行在硬件基礎上;Office軟件須要運行在操做系統上。而且程序與運行環境之間會有必定的數據交換,好比操做系統會將運行指令傳遞給硬件,硬件也會將指令運行結果傳遞給操做系統。Java Web程序也須要一個運行環境纔可以執行。這種運行Java Web程序的環境被稱爲Web容器,Java Web程序與Web容器之間存在數據交互。目前主要存在兩種類型的Java Web容器:一種是獨立的Java Web容器,在這種容器裏面只能運行Web程序,這種容器通常也叫作Web服務器,如Tomcat等;另外一種是與其餘Java EE容器混合在一塊兒的Web容器,Web容器負責運行Web程序,其餘容器負責運行EJB等程序,如WebLogic等。 當用戶經過瀏覽器等Web客戶端軟件向服務器發出一個請求以後,首先接收到這個請求的是Web容器,Web容器會將請求信息封裝到一個HttpServletRequest類型的Java對象中,並將對象傳遞給Java Web程序。對於每一個請求,Web容器還會建立一個HttpServletResponse類型對象,該對象的做用是用來保存須要返回到瀏覽器等客戶端的內容。Java Web程序能夠從HttpServletRequest提取用戶發出的請求信息,進行適當的處理以後,將處理結果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse對象內容,並將解析結果以瀏覽器可以識別的HTML等格式返回給瀏覽器等客戶端。在這個過程當中,HttpServletRequest和HttpServletResponse就如同兩條渡船,負責在Web容器和Java Web程序之間傳遞信息。須要注意的是,這兩個對象僅存在於Web容器和Java Web程序當中,與瀏覽器沒有關係。下圖是這個過程的示意圖: 2、Web應用 Web應用,能夠認爲是Web程序的另外一個名稱。缺的的定義就是運行在Web容器當中的,可以完成完整功能的應用程序。Java Web應用由一系列編譯以後的Java類、靜態圖片、靜態HTML文件、配置文件等構成。經過Java Web應用能夠就收用戶的輸入和請求,並對請求信息進行加工處理、訪問數據庫、對用戶的請求給出迴應。開發Java Web應用程序處理須要遵照Web應用的一些特殊規範要求之外,與開發其餘類型的應用程序並無本質區別。目前Web應用主要有兩種類型:一種是以展現爲目的的Web應用,這種應用會以HTML等標記文本或者瀏覽器所能識別的媒體格式最爲請求返回內容,用戶能夠經過瀏覽器等客戶端操做這類應用。另外一類是以服務爲目的的Web應用,這類應用不提供圖形操做界面,只提供方法調用結構,好比Web服務,該類應用通常只能被其餘應用程序調用和訪問。 3、Web元件 Web元件是構成Web應用,可以對來自瀏覽器等客戶端請求作出迴應的基本單元。在Java Web應用中,所提供的Web元件有Servlet、JavaServer Pages(JSP)、JavaServer Faces(JSF)等。另外還可使用其餘類型Web應用一樣使用的內容,好比HTML文件、靜態圖片等。事實上Java Web只提供了一種Web元件元件,就是Servlet,JSP、JSF等都是基於Servlet的衍生技術。Servlet實質就是一個有特殊繼承關係要求的Java類,理解Servlet就基本上徹底理解Java Web技術了。 4、Web模塊 在Java EE技術體系中,除了Java Web之外,還包括EJB等其餘技術。每一個技術體系會運行在各自的容器當中,不一樣的部分組合在一塊兒構成完整的Java EE應用,每一個部分根據本身的特色被稱爲Java Web模塊或者EJB模塊。之因此把他們稱爲模塊,是由於但願Java EE應用不一樣部分能像積木同樣組合出更大、更復雜的應用出來,而且每一個部分保證其獨立性。不一樣的模塊都有本身特定的目錄結構要求。Java Web模塊的目錄結構要求以下: ◆應用文檔根目錄。改目錄是Java Web模塊的最上層目錄,組成Web模塊的全部Web元件以及配置文件等都包含在該目錄或者子目錄下。在改目錄下能夠直接存放HTML文件,圖片文件等。 ◆WEB-INF目錄。改目錄位於應用文檔根目錄下,用來保存那些不但願被瀏覽器等客戶端訪問的文件,好比發佈描述文件、編譯以後的類文件。由於這些文件是由由Web容器進行解釋或者執行的。瀏覽器不能夠直接看到這些文件,只能看到這些文件的執行結果。 ◆web.xml文件。該文件位於WEB-INF目錄下,是Web應用的部署描述文件,用來與定義Web應用運行相關的信息,好比執行邏輯,Servlet等Web元件的訪問路徑等。改文件的格式必須符合所使用的Servlet版本的規格要求。 ◆classes目錄。該目錄位於WEB-INF目錄下,用來保存編譯以後的Java類文件,好比Servlet、輔助類、其餘業務處理類等。 ◆tags目錄。該目錄位於WEB-INF目錄下,用來保存那些標籤庫的標籤描述文件。 ◆lib目錄。該目錄位於WEB-INF目錄下,用來保存Web應用運行所依賴的,通過打包以後的Java類文件。打包格式通常是.jar格式。 對於Java Web模塊目錄中WEB-INF、web.xml、classes、tags、lib這些內容之外,用戶能夠根據本身的須要在Web應用文檔根目錄下建立其餘目錄,好比能夠爲圖片、不一樣用途的HTML或者JSP單首創建目錄;還能夠爲不用的Java類在classes下建立包目錄。若是在你的Web應用中沒有使用到Servlet、過濾器、監聽器等Java Web元件,能夠沒有web.xml文件;若是沒有使用到標籤,則能夠沒有tags目錄。 Web模塊的發佈工做,能夠直接以目錄的形式發佈,也能夠打包成jar格式文件進行發佈。由於用途和內容的特殊性,打包文件的擴展名會採用.war而不是.jar。另外若是不是發佈到獨立的Web服務器上,而是發佈到與其餘Java EE一塊兒使用的企業應用服務器上,還須要編寫一個與企業應用服務器相關的配置文件,這個文件對於不一樣的企業應用服務器也不一樣,好比發佈到glassfish服務器上,須要編寫的文件時sun-web.xml。