Java web部署目錄結構和web.xml做用

1、Javaweb 部署目錄結構

servlet規範不只規範了servlet自身處理web請求的通用邏輯過程,
還規範了web服務器管理servlet的通用步驟。html

爲了使得咱們開發的Java web 應用能在多種多樣的 Java web服務器上運行,而不用作代碼上的修改,根據servlet規範Java web應用在服務器中部署時的目錄結構應該以下:java

–        應用程序根目錄
–            |-- WEB-INF目錄:必須目錄,外界不可訪問
–                  |-- web.xml:Web應用部署描述文件,必須 
–                  |-- classes目錄:應用處理邏輯代碼,編譯過的字節碼文件
–                  |-- lib目錄:第三方類庫文件
–                  |-- TLD文件:標籤庫描述文件 
–            |-- META-INF目錄:必須目錄,外界不可訪問
–                  |--  context.xml
–            |-- 其餘文件:JSP、HTML、CSS、JavaScript、圖片等,外界可直接訪問

 

2、web.xml的主要做用

你在WEB服務器的應用目錄下部署了你的web應用,等待服務器啓動:
一、web服務器啓動的時候會爲其應用目錄下的各個應用進行初始化,依據就是WEB-INF下的web.xml。web

二、首先標識應用適用的servlet規範數據庫

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

三、而後逐個解析web.xml中的標籤:apache

容器對於web.xml的加載過程是context-param >> listener  >> fileter  >> servlet瀏覽器

初始化過程:服務器

  • 在啓動Web項目時,容器(好比Tomcat)會讀web.xml配置文件中的兩個節點<listener>和<contex-param>。
  • 接着容器會建立一個ServletContext(上下文),應用範圍內即整個WEB項目都能使用這個上下文。
  • 接着容器會將讀取到<context-param>轉化爲鍵值對,並交給ServletContext。
  • 容器建立<listener></listener>中的類實例,即建立監聽。在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中能夠經過event.getServletContext().getInitParameter("contextConfigLocation") 來獲得context-param 設定的值。在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷燬方法.用於關閉應用前釋放資源,好比說數據庫鏈接的關閉。
  • 獲得這個context-param的值以後,你就能夠作一些操做了.注意,這個時候你的WEB項目尚未徹底啓動完成.這個動做會比全部的Servlet都要早。

<filter>和<filter-mapping>:過濾器(加工類),是說session

  • servlet對請求處理以前,用哪些class先對請求進行一番處理,好比進行統計一些數據、身份識別等
  • servlet處理完請求後的響應,再用一些class對這個響應進行一些加工啊,剔除等工做

filter代表本應用編寫了哪些加工類,每一個類有哪些參數
filter-mapping規定了一個url由哪些加工類進行處理的規則。一個url請求或響應可被多個加工類依次加工
 app

<servlet>:告訴服務器這個應用寫了哪些servlet,每一個servlet的名字,對應的class全路徑名,啓動時服務器是否對他進行實例化,實例化時有哪些參數
 url

<servlet-mapping>:告訴服務器根據請求的Url找哪一個servlet來處理的規則,多個url能夠由同一個servlet來處理,url的模式能夠進行通配表示。

對於以下的一些映射關係:
  Servlet1 映射到 /abc/* 
  Servlet2 映射到 /* 
  Servlet3 映射到 /abc 
  Servlet4 映射到 *.do 
問題:
  當請求URL爲「/abc/a.html」,「/abc/*」和「/*」都匹配,哪一個servlet響應
      Servlet引擎將調用Servlet1。
  當請求URL爲「/abc」時,「/abc/*」和「/abc」都匹配,哪一個servlet響應
      Servlet引擎將調用Servlet3。
  當請求URL爲「/abc/a.do」時,「/abc/*」和「*.do」都匹配,哪一個servlet響應
      Servlet引擎將調用Servlet1。
  當請求URL爲「/a.do」時,「/*」和「*.do」都匹配,哪一個servlet響應
      Servlet引擎將調用Servlet2。
  當請求URL爲「/xxx/yyy/a.do」時,「/*」和「*.do」都匹配,哪一個servlet響應
      Servlet引擎將調用Servlet2。
  匹配的原則就是"誰長得更像就找誰"

session-config:設置多久時間內還認得你

mime-mapping: 告訴瀏覽器返回的文件的具體類型,讓瀏覽器能正確選擇處理程序

welcom-file-list: 默認處理文件

error-page :告訴服務器對某些異常的HTTP狀態碼,或特定類型異常被拋出時,要顯示的頁面的規則

四、解析完畢就等着瀏覽器端的請求咯,來一個請求就新開個線程,根據url模式找處處理其的servlet,封裝好請求對象(若是有加工類就先加工)、響應對象做爲參數調用servlet的service方法,將得到的響應返回給瀏覽器。

 

按照部署目錄和web.xml元素知識,相信你能夠開始進行Java web 開發了吧!

 

感謝! 參考文:

http://www.cnblogs.com/xdp-gacl/p/3760336.html

http://www.ibm.com/developerworks/cn/java/j-lo-servlet/

http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html

相關文章
相關標籤/搜索