一、
1、啟動一個WEB項目的時候,WEB容器會去讀取它的配置文件web.xml,讀取和兩個結點。
2、緊急着,容創建一個ServletContext(servlet上下文),這個web項目的所有部分都將共享這個上下文。
3、容器將轉換為鍵值對,並交給servletContext。
4、容器創建中的類實例,創建監聽器。
二、
load-on-startup 元素在web應用啟動的時候指定了servlet被加載的順序,它的值必須是一個整數。如果它的值是一個負整數或是這個元素不存在,那么容器會在該servlet被調用的時候,加載這個servlet 。如果值是正整數或零,容器在配置的時候就加載並初始化這個servlet,容器必須保證值小的先被加載。如果值相等,容器可以自動選擇先加載誰。
在servlet的配置當中,5的含義是:
標記容器是否在啟動的時候就加載這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就加載這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載。
正數的值越小,啟動該servlet的優先級越高。
三、
在項目中總會遇到一些關於加載的優先級問題,近期也同樣遇到過類似的,所以自己查找資料總結了下,下面有些是轉載其他人的,畢竟人家寫的不錯,自己也就不重復造輪子了,只是略加點了自己的修飾。
首先可以肯定的是,加載順序與它們在 web.xml 文件中的先后順序無關。即不會因為 filter 寫在 listener 的前面而會先加載 filter。最終得出的結論是:listener -> filter -> servlet
同時還存在着這樣一種配置節:context-param,它用於向 ServletContext 提供鍵值對,即應用程序上下文信息。我們的 listener, filter 等在初始化時會用到這些上下文中的信息,那么 context-param 配置節是不是應該寫在 listener 配置節前呢?實際上 context-param 配置節可寫在任意位置,因此真正的加載順序為:context-param -> listener -> filter -> servlet
對於某類配置節而言,與它們出現的順序是有關的。以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這里一定要注意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之后,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。
servlet 同 filter 類似 ,此處不再贅述。
由此,可以看出,web.xml 的加載順序是:context-param -> listener -> filter -> servlet ,而同個類型之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。
web.xml文件詳解
Web.xml常用元素
Listener元素指出事件監聽程序類。
但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。
可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。
而不用編輯使用這些文件的JSP頁面。
的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。
< ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。
相應元素配置
1、Web應用圖標:指出IDE和GUI工具用來表示Web應用的大圖標和小圖標
2、Web 應用名稱:提供GUI工具可能會用來標記這個特定的Web應用的一個名稱
3、Web 應用描述: 給出於此相關的說明性文本
4、上下文參數:聲明應用范圍內的初始化參數。
在servlet里面可以通過getServletContext().getInitParameter(“context/param”)得到
5、過濾器配置:將一個名字與一個實現javaxs.servlet.Filter接口的類相關聯。
6、監聽器配置
7、Servlet配置
基本配置
高級配置
元素說明
當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.
當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它
8、會話超時配置(單位為分鍾)
9、MIME類型配置
10、指定歡迎文件頁配置
11、配置錯誤頁面
一、 通過錯誤碼來配置error-page
上面配置了當系統發生404錯誤時,跳轉到錯誤處理頁面NotFound.jsp。
二、通過異常的類型配置error-page
上面配置了當系統發生java.lang.NullException(即空指針異常)時,跳轉到錯誤處理頁面error.jsp
12、TLD配置
如果MyEclipse一直在報錯,應該把
13、資源管理對象配置
14、資源工廠配置
配置數據庫連接池就可在此配置:
15、安全限制配置
16、登陸驗證配置
17、安全角色:security-role元素給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素的role-name子元素中。
分別地聲明角色可使高級IDE處理安全信息更為容易。
18、Web環境參數:env-entry元素聲明Web應用的環境項
19、EJB 聲明
20、本地EJB聲明
21、配置DWR
22、配置Struts
org.apache.struts.action.ActionServlet
<!– Struts Tag Library Descriptors –>
<taglib>
<taglib-uri>struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
23、配置Spring(基本上都是在Struts中配置的)
<!– 指定spring配置文件位置 –>
<!–加載多個spring配置文件 –>
/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml
<!– 定義SPRING監聽器,加載spring –>
