web.xml加載順序html
應用服務器啓動時web.xml加載過程,至於這些節點在xml文件中的先後順序沒有關係,不過有些應用服務器,我曾碰到過的 websphere就嚴格要求web.xml的節點順序,不然部署不成功,因此仍是同意按照web.xml標準格式寫
content-param --> listener --> filter --> servletjava
一、啓動WEB項目的時候,應用服務器會去讀它的配置文件web.xml.讀兩個節點:<listener></listener> 和 <context-param></context-param>
二、緊接着,容器建立一個ServletContext(上下文),這個WEB項目全部部分都將共享這個上下文.
三、容器將<context-param></context-param>轉化爲鍵值對,並交給ServletContext.
四、容器建立<listener></listener>中的類實例,即建立監聽.
五、在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中得到:
ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的鍵");
六、獲得這個context-param的值以後,你就能夠作一些操做了.注意,這個時候你的WEB項目尚未徹底啓動完成.這個動做會比全部的Servlet都要早.換句話說,這個時候,你對<context-param>中的鍵值作的操做,將在你的WEB項目徹底啓動以前被執行.若是想在項目啓動以前就打開數據庫,那麼這裏就能夠在<context-param>中設置數據庫的鏈接方式,在監聽類中初始化數據庫的鏈接,這個監聽是本身寫的一個類,除了初始化方法,它還有銷燬方法.用於關閉應用前釋放資源.好比說數據庫鏈接的關閉.web
對於某類配置節而言,與它們出現的順序是有關的。
以 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 相似,此處再也不贅述。spring
好比filter 須要用到 bean ,但加載順序是: 先加載filter 後加載spring,則filter中初始化操做中的bean爲null;因此,若是過濾器中要使用到 bean,能夠將spring 的加載 改爲 Listener的方式
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>sql
web.xml節點解析
根節點
一、 <web-app></web-app>
數據庫
經常使用節點介紹
二、 <context-param /> 用來設定web站臺的環境參數
它包含兩個子元素:
<param-name></param-name> 用來指定參數的名稱
<param-value></param-value> 用來設定參數值
在此設定的參數,能夠在servlet中用 getServletContext().getInitParameter("my_param") 來取得
例子:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath*:/log4j.properties</param-value>
</context-param>
三、 <listener /> 用來設定Listener接口
它的主要子元素爲
<listener-class></listener-class> 定義Listener的類名稱
例子:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
四、 <filter /> 是用來聲明filter的相關設定
<filter-name></filter-name> 這固然就是指定filter的名字
<filter-class></filter-class> 這是用來定義filter的類的名稱
<init-param></init-param> 用來定義參數,它有兩個子元素:
<param-name></param-name> 用來指定參數的名稱
<param-value></param-value> 用來設定參數值
例子:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
五、 <servlet /> 用來聲明一個servlet的數據,主要有如下子元素:
<servlet-name></servlet-name> 指定servlet的名稱
<servlet-class></servlet-class> 指定servlet的類名稱
<jsp-file></jsp-file> 指定web站臺中的某個JSP網頁的完整路徑
<init-param></init-param> 用來定義參數,和前面的<init-param>差很少
一樣,與<servlet></servlet>一塊兒使用的是
<servlet-mapping></servlet-mapping> 用來定義servlet所對應的URL,包含兩個子元素:
<servlet-name></servlet-name> 指定servlet的名稱
<url-pattern></url-pattern> 指定servlet所對應的URL
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.test.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/demoServlet</url-pattern>
</servlet-mapping>
服務器
基本節點:
六、 <description/> 是對站臺的描述
例子:<description>傳道、授業、解惑</description>
七、 <display-name/> 定義站臺的名稱
例子:<display-name>個人站點</display-name>
八、 <icon>
icon元素包含small-icon和large-icon兩個子元素.用來指定web站臺中小圖標和大圖標的路徑.
<small-icon>/路徑/smallicon.gif</small-icon>
small-icon元素應指向web站臺中某個小圖標的路徑,大小爲16 X 16 pixel,可是圖象文件必須爲GIF或JPEG格式,擴展名必須爲:.gif或.jpg.
<large-icon>/路徑/largeicon-jpg</large-icon>
large-icon元素應指向web站臺中某個大圖表路徑,大小爲32 X 32 pixel,可是圖象文件必須爲GIF或JPEG的格式,擴展名必須爲; gif或jpg.
例子:
<icon>
<small-icon>/images/small.gif</small-icon>
<large-icon>/images/large.gir</large-icon>
</icon>
九、 <distributable/> 是指定該站臺是否可分佈式處理
十、 <session-config/> 用來定義web站臺中的session參數
包含一個子元素:
<session-timeout></session-timeout> 用來定義這個web站臺全部session的有效期限,單位爲 分鐘
session
十一、 <mime-mapping /> 定義某一個擴展名和某一個MIME Type作對應該
包含兩個子元素:
<extension></extension> 擴展名的名稱
<mime-type></mime-type> MIME格式
例子:
<mime-mapping>
<extension>doc</extension>
<mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
app
十二、 <error-page>
<error-page>
<error-code>500</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>502</error-code>
<location>/index.jsp</location>
</error-page>
1三、 <jsp-config/>
<jsp-config>
<taglib>
<taglib-uri>/struts-tags</taglib-uri>
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-dojo-tags</taglib-uri>
<taglib-location>/WEB-INF/struts-dojo-tags.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/s</taglib-uri>
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>
</jsp-config>
1四、 <welcome-file-list/>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
15、 <resource-ref></resource-ref> 定義利用JNDI取得站臺可利用的資源
有五個子元素:
<description></description> 資源說明
<rec-ref-name></rec-ref-name> 資源名稱
<res-type></res-type> 資源種類
<res-auth></res-auth> 資源經由Application或Container來許可
<res-sharing-scope></res-sharing-scope> 資源是否能夠共享,有Shareable和Unshareable兩個值,默認爲Shareablejsp
好比,配置數據庫鏈接池就可在此配置 <resource-ref> <description>JNDI JDBC DataSource of shop</description> <res-ref-name>jdbc/sample_db</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>