Analysis of Web.xml in Hello1 project
web.xml加載過程(步驟)
首先簡單講一下,web.xml的加載過程。當啟動一個WEB項目時,容器包括(JBoss、Tomcat等)首先會讀取項目web.xml配置文件里的配置,當這一步驟沒有出錯并且完成之后,項目才能正常地被啟動起來。
1. 啟動WEB項目的時候,容器首先會去它的配置文件web.xml讀取兩個節點:? <listener></listener>和<context-param></context-param>。
2. 緊接著,容器創建一個ServletContext(application),這個WEB項目所有部分都將共享這個上下文。
3. 容器以<context-param></context-param>的name作為鍵,value作為值,將其轉化為鍵值對,存入ServletContext。
4. 容器創建<listener></listener>中的類實例,根據配置的class類路徑<listener-class>來創建監聽,在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,啟動Web應用時,系統調用Listener的該方法。
5. 舉例:你可能想在項目啟動之前就打開數據庫,那么這里就可以在<context-param>中設置數據庫的連接方式(驅動、url、user、password),在監聽類中初始化數據庫的連接。這個監聽是自己寫的一個類,除了初始化方法,它還有銷毀方法,用于關閉應用前釋放資源。比如:說數據庫連接的關閉,此時,調用contextDestroyed(ServletContextEvent args),關閉Web應用時,系統調用Listener的該方法。
6. 接著,容器會讀取<filter></filter>,根據指定的類路徑來實例化過濾器。
7.?以上都是在WEB項目還沒有完全啟動起來的時候就已經完成了的工作。如果系統中有Servlet,則Servlet是在第一次發起請求的時候被實例化的,而且一般不會被容器銷毀,它可以服務于多個用戶的請求。所以,Servlet的初始化都要比上面提到的那幾個要遲。
8.?總的來說,web.xml的加載順序是:<context-param>-><listener>-><filter>-><servlet>。其中,如果web.xml中出現了相同的元素,則按照在配置文件中出現的先后順序來加載。
WEB.xml In Hello1:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.1" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">這一部分顯示了XML 的版本(1.0)和所使用的編碼格式(UTF-8 )
然后下一行描述文檔的根元素:web-app,并且在最后一行定義了根元素的結尾:</web-app>。
<context-param>??????? <param-name>javax.faces.PROJECT_STAGE</param-name>
??????? <param-value>Development</param-value>
??? </context-param>
<context-param>以鍵值對的形式配置,在web項目啟動時就會訪問該節點,容器會將這個節點傳輸到ServletContext(上下文對象)中,在程序中就能通過這個上下文對象去取得我們這個配置值。
1 <servlet> 2 <servlet-name>Faces Servlet</servlet-name> 3 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 4 <load-on-startup>1</load-on-startup> 5 </servlet> 6 <servlet-mapping> 7 <servlet-name>Faces Servlet</servlet-name> 8 <url-pattern>*.xhtml</url-pattern> 9 </servlet-mapping>一個servlet元素及其servlet-mapping元素指定?FacesServlet。所有帶.xhtml后綴的文件都將匹配它。
servlet-mapping元素在Servlet和URL樣式之間定義一個映射。
它包含了兩個子元素servlet- name和url-pattern:
servlet-name元素給出的Servlet名字必須是 在servlet元素中聲明過的Servlet的名字。
url-pattern元素指定對應于Servlet的URL路徑,
如果url-pattern定義的是路徑,那么以后所有對這個路徑下資源的請求都會由servlet-name中定義的servlet處理.
如果url-pattern定義的是資源格式例如*.do等,那么對于所有符合這種格式的資源的請求都由指定的servlet處理。
session-timeout元素用來指定默認的會話超時時間間隔,以分鐘為單位。該元素值必須為整數。如果session-timeout元素的值為零或者負數,則表示會話將永遠不會超時。
轉載于:https://www.cnblogs.com/BleachCurtain/p/10642810.html
總結
以上是生活随笔為你收集整理的Analysis of Web.xml in Hello1 project的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论c++/java/c 与python的
- 下一篇: 类定义