最近在學習Java Web,發現Java Web的概念不少,並且各個概念之間的關係也挺複雜,本篇博客把這些關係總結於此,主要參考的博客附在文章末尾。html
服務器,硬件角度上說就是一臺高性能的計算機。咱們一般指的服務器其實應該是裝有可以處理具體請求事務的服務器軟件的計算機。好比最多見的www服務器、mail服務器、計費服務器、ftp服務器等等。不少時候人們常把諸如Tomcat、IIS、Weblogic 也稱之爲web服務器,其實這些只是用於開發、集成、部署和管理Web應用、網絡應用和數據庫應用的應用服務器軟件。咱們把遵照J2EE規範中的WEBAPPLICATION標準的WEB服務器就叫作J2EE中的WEB容器。java
全部的程序運行都須要有一個必要的運行環境。這個環境能夠是軟件,也能夠是硬件,或者是軟件和硬件的結合。好比說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容器,Web容器會將請求信息封裝到一個HttpServletRequest類型的Java對象中,並將對象傳遞給Java Web程序。對於每一個請求,Web容器還會建立一個HttpServletResponse類型對象,該對象的做用是用來保存須要返回到瀏覽器等客戶端的內容。數據庫
Java Web程序能夠從HttpServletRequest提取用戶發出的請求信息,進行適當的處理以後,將處理結果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse對象內容,並將解析結果以瀏覽器可以識別的HTML等格式返回給瀏覽器等客戶端。在這個過程當中,HttpServletRequest和HttpServletResponse就如同兩條渡船,負責在Web容器和Java Web程序之間傳遞信息。須要注意的是,這兩個對象僅存在於Web容器和Java Web程序當中,與瀏覽器沒有關係。下圖是這個過程的示意圖:
設計模式
Web組件(Web Component)是構成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技術了。瀏覽器
Web應用能夠認爲是Web程序的另外一個名稱。定義就是運行在Web容器當中的,可以完成完整功能的應用程序。Java Web應用由一系列編譯以後的Java類、靜態圖片、靜態HTML文件、配置文件等構成。經過Java Web應用能夠就收用戶的輸入和請求,並對請求信息進行加工處理、訪問數據庫、對用戶的請求給出迴應。tomcat
開發Java Web應用程序處理須要遵照Web應用的一些特殊規範要求之外,與開發其餘類型的應用程序並無本質區別。目前Web應用主要有兩種類型:一種是以展現爲目的的Web應用,這種應用會以HTML等標記文本或者瀏覽器所能識別的媒體格式最爲請求返回內容,用戶能夠經過瀏覽器等客戶端操做這類應用。另外一類是以服務爲目的的Web應用,這類應用不提供圖形操做界面,只提供方法調用結構,好比Web服務,該類應用通常只能被其餘應用程序調用和訪問。服務器
在Java EE技術體系中,除了Java Web之外,還包括EJB等其餘技術。每一個技術體系會運行在各自的容器當中,不一樣的部分組合在一塊兒構成完整的Java EE應用,每一個部分根據本身的特色被稱爲Java Web模塊或者EJB模塊。之因此把他們稱爲模塊,是由於但願Java EE應用不一樣部分能像積木同樣組合出更大、更復雜的應用出來,而且每一個部分保證其獨立性。不一樣的模塊都有本身特定的目錄結構要求。Java Web模塊的目錄結構要求以下。網絡
對於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。
儘管JSP在本質上就是Servlet,JSP編譯後就是一個「類servlet」,可是二者的建立方式不同。
總之,JSP是Servlet的一種簡化,使用JSP只須要完成程序員須要輸出到客戶端的內容,至於JSP中的Java腳本若是鑲嵌到一個類中,由JSP容器完成,而Servlet則是個完整的java類,這個類的service方法用於生成對客戶端的響應。
Servlet(小服務程序)是一個與協議無關的、跨平臺的Web組件,它基於Java技術開發,由Servlet容器所管理。Servlet運行在服務器端,能夠動態地擴展服務器的功能,並採用「請求一響應」模式提供Web服務。 Servlet的主要功能是交互式地瀏覽和修改數據,生成動態Web內容。
當初在Apache開發時還未出現Servlet的概念,因此Apache不能內置支持Servlet。實
際上,除了Apache,其餘許多Web服務器軟件都不能直接支持Servlet。爲了支持Servlet,
一般要單獨開發程序,這種程序通常稱爲Web容器,它在Servlet的生命週期內包容和管理Servlet,是一個實時運行的外殼程序。運行時由Web服務器軟件處理通常請求,並把Servlet調用傳遞給容器來處理。Tomcat就是知足這種須要的JSP/Servlet引擎,是Sun公司的JSP/Servlet的官方實現。Tomcat服務器接收客戶端請求並做出響應的完整過程下圖所示。
Tomcat是提供一個支持Servlet和JSP運行的容器。Servlet和JSP能根據實時須要,產生動態網頁內容。而對於Web服務器來講,Apache僅僅支持靜態網頁,對於支持動態網頁就會顯得無能爲力; Tomcat則既能爲動態網頁服務,同時也能爲靜態網頁提供支持。儘管它沒有一般的Web服務器快、功能也不如Web服務器豐富,可是Tomcat逐漸爲支持靜態內容不斷擴充。大多數的Web服務器都是用底層語言編寫如C,利用了相應平臺的特徵,所以用純Java編寫的Tomcat執行速度不可能與它們相提並論。
通常來講,大的站點都是將Tomcat與Apache的結合,Apache負責接受全部來自客戶端的HTTP請求,而後將Servlets和JSP的請求轉發給Tomcat來處理。Tomcat完成處理後,將響應傳回給Apache,最後Apache將響應返回給客戶端。