概念一直是軟件行業(yè)頻繁出現(xiàn)的東西,很多時候,學(xué)習(xí)計算機軟件開發(fā)遇到困難不是因為技術(shù)本身有多么復(fù)雜,而是因為對某些概念的不理解。JavaWeb作為JavaEE技術(shù)體系的一部分,應(yīng)該是目前所有Web開發(fā)技術(shù)中最復(fù)雜的一種,很多初學(xué)者,或者是從ASP、PHP轉(zhuǎn)移過來的開發(fā)者都會遇到概念方面的困難,覺得她們非常深奧,難以理解。其實這都是廠家為了宣傳需要,將概念復(fù)雜化、學(xué)術(shù)化了。很多概念都是簡單的,可以被我們掌握的。在這里,我們首先去澄清JavaWeb開發(fā)中幾個常用的基本概念?! ?br />  1、Web容器
  
  所有的程序運行都需要有一個必要的運行環(huán)境。這個環(huán)境可以是軟件,也可以是硬件,或者是軟件和硬件的結(jié)合。比如說Windows操作系統(tǒng)需要運行在硬件基礎(chǔ)上;Office軟件需要運行在操作系統(tǒng)上。并且程序與運行環(huán)境之間會有一定的數(shù)據(jù)交換,比如操作系統(tǒng)會將運行指令傳遞給硬件,硬件也會將指令運行結(jié)果傳遞給操作系統(tǒng)。JavaWeb程序也需要一個運行環(huán)境才能夠執(zhí)行。這種運行JavaWeb程序的環(huán)境被稱為Web容器,JavaWeb程序與Web容器之間存在數(shù)據(jù)交互。目前主要存在兩種類型的JavaWeb容器:一種是獨立的JavaWeb容器,在這種容器里面只能運行Web程序,這種容器一般也叫做Web服務(wù)器,如Tomcat等;另一種是與其他JavaEE容器混合在一起的Web容器,Web容器負(fù)責(zé)運行Web程序,其他容器負(fù)責(zé)運行EJB等程序,如WebLogic等。
  
  當(dāng)用戶通過瀏覽器等Web客戶端軟件向服務(wù)器發(fā)出一個請求之后,首先接收到這個請求的是Web容器,Web容器會將請求信息封裝到一個HttpServletRequest類型的Java對象中,并將對象傳遞給JavaWeb程序。JavaWeb程序可以從HttpServletRequest提取用戶發(fā)出的請求信息,進行適當(dāng)?shù)奶幚碇螅瑢⑻幚斫Y(jié)果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse對象內(nèi)容,并將解析結(jié)果以瀏覽器能夠識別的HTML等格式返回給瀏覽器等客戶端。在這個過程中,HttpServletRequest和HttpServletResponse就如同兩條渡船,負(fù)責(zé)在Web容器和JavaWeb程序之間傳遞信息。

 2、Web元件
  
  Web元件是構(gòu)成Web應(yīng)用,能夠?qū)碜詾g覽器等客戶端請求做出回應(yīng)的基本單元。在JavaWeb應(yīng)用中,所提供的Web元件有Servlet、JavaServerPages(JSP)、JavaServerFaces(JSF)等。另外還可以使用其他類型Web應(yīng)用同樣使用的內(nèi)容,比如HTML文件、靜態(tài)圖片等。事實上JavaWeb只提供了一種Web元件元件,就是Servlet,JSP、JSF等都是基于Servlet的衍生技術(shù)。Servlet實質(zhì)就是一個有特殊繼承關(guān)系要求的Java類,理解Servlet就基本上完全理解JavaWeb技術(shù)了。

  3、Web模塊
  
  在JavaEE技術(shù)體系中,除了JavaWeb以外,還包括EJB等其他技術(shù)。每個技術(shù)體系會運行在各自的容器當(dāng)中,不同的部分組合在一起構(gòu)成完整的JavaEE應(yīng)用,每個部分根據(jù)自己的特點被稱為JavaWeb模塊或者EJB模塊。之所以把他們稱為模塊,是因為希望JavaEE應(yīng)用不同部分能像積木一樣組合出更大、更復(fù)雜的應(yīng)用出來,并且每個部分保證其獨立性。不同的模塊都有自己特定的目錄結(jié)構(gòu)要求。JavaWeb模塊的目錄結(jié)構(gòu)要求如下:
  
  ◆應(yīng)用文檔根目錄。改目錄是JavaWeb模塊的最上層目錄,組成Web模塊的所有Web元件以及配置文件等都包含在該目錄或者子目錄下。在改目錄下可以直接存放HTML文件,圖片文件等。
  
  ◆WEB-INF目錄。改目錄位于應(yīng)用文檔根目錄下,用來保存那些不希望被瀏覽器等客戶端訪問的文件,比如發(fā)布描述文件、編譯之后的類文件。因為這些文件是由由Web容器進行解釋或者執(zhí)行的。瀏覽器不可以直接看到這些文件,只能看到這些文件的執(zhí)行結(jié)果。


  ◆classes目錄。該目錄位于WEB-INF目錄下,用來保存編譯之后的Java類文件,比如Servlet、輔助類、其他業(yè)務(wù)處理類等。
  
  
  ◆web.xml文件。該文件位于WEB-INF目錄下,是Web應(yīng)用的部署描述文件,用來與定義Web應(yīng)用運行相關(guān)的信息,比如執(zhí)行邏輯,Servlet等Web元件的訪問路徑等。改文件的格式必須符合所使用的Servlet版本的規(guī)格要求。
    
  對于JavaWeb模塊目錄中WEB-INF、web.xml、classes、tags、lib這些內(nèi)容以外,用戶可以根據(jù)自己的需要在Web應(yīng)用文檔根目錄下創(chuàng)建其他目錄,比如可以為圖片、不同用途的HTML或者JSP單獨創(chuàng)建目錄;還可以為不用的Java類在classes下創(chuàng)建包目錄。如果在你的Web應(yīng)用中沒有使用到Servlet、過濾器、監(jiān)聽器等JavaWeb元件,可以沒有web.xml文件;如果沒有使用到標(biāo)簽,則可以沒有tags目錄。
  
  Web模塊的發(fā)布工作,可以直接以目錄的形式發(fā)布,也可以打包成jar格式文件進行發(fā)布。因為用途和內(nèi)容的特殊性,打包文件的擴展名會采用.war而不是.jar。另外如果不是發(fā)布到獨立的Web服務(wù)器上,而是發(fā)布到與其他JavaEE一起使用的企業(yè)應(yīng)用服務(wù)器上,還需要編寫一個與企業(yè)應(yīng)用服務(wù)器相關(guān)的配置文件,這個文件對于不同的企業(yè)應(yīng)用服務(wù)器也不同,比如發(fā)布到glassfish服務(wù)器上,需要編寫的文件時sun-web.xml。<