這個(gè)不是原創(chuàng),有點(diǎn)早了,具體從哪里來(lái)的已經(jīng)記不得了。但是東西是實(shí)實(shí)在在的。
1、啟動(dòng)一個(gè)WEB項(xiàng)目的時(shí)候,WEB容器會(huì)去讀取它的配置文件web.xml,讀取<listener>和<context-param>兩個(gè)結(jié)點(diǎn)。
2、緊急著,容創(chuàng)建一個(gè)ServletContext(servlet上下文),這個(gè)web項(xiàng)目的所有部分都將共享這個(gè)上下文。
3、容器將<context-param>轉(zhuǎn)換為鍵值對(duì),并交給servletContext。
4、容器創(chuàng)建<listener>中的類(lèi)實(shí)例,創(chuàng)建監(jiān)聽(tīng)器。
二 Load-on-startup
Load-on-startup 元素在web應(yīng)用啟動(dòng)的時(shí)候指定了servlet被加載的順序,它的值必須是一個(gè)整數(shù)。如果它的值是一個(gè)負(fù)整數(shù)或是這個(gè)元素不存在,那么容器會(huì)在該servlet被調(diào)用的時(shí)候,加載這個(gè)servlet 。如果值是正整數(shù)或零,容器在配置的時(shí)候就加載并初始化這個(gè)servlet,容器必須保證值小的先被加載。如果值相等,容器可以自動(dòng)選擇先加載誰(shuí)。
在servlet的配置當(dāng)中,<load-on-startup>5</load-on-startup>的含義是:
標(biāo)記容器是否在啟動(dòng)的時(shí)候就加載這個(gè)servlet。
當(dāng)值為0或者大于0時(shí),表示容器在應(yīng)用啟動(dòng)時(shí)就加載這個(gè)servlet;
當(dāng)是一個(gè)負(fù)數(shù)時(shí)或者沒(méi)有指定時(shí),則指示容器在該servlet被選擇時(shí)才加載。
正數(shù)的值越小,啟動(dòng)該servlet的優(yōu)先級(jí)越高。
三 加載順序
首先可以肯定的是,加載順序與它們?cè)?web.xml 文件中的先后順序無(wú)關(guān)。即不會(huì)因?yàn)?filter 寫(xiě)在 listener 的前面而會(huì)先加載 filter。最終得出的結(jié)論是:ServletContext ->listener -> filter -> servlet
同時(shí)還存在著這樣一種配置節(jié):context-param,它用于向 ServletContext 提供鍵值對(duì),即應(yīng)用程序上下文信息。我們的 listener, filter 等在初始化時(shí)會(huì)用到這些上下文中的信息,那么 context-param 配置節(jié)是不是應(yīng)該寫(xiě)在 listener 配置節(jié)前呢?實(shí)際上 context-param 配置節(jié)可寫(xiě)在任意位置,因此真正的加載順序?yàn)椋篶ontext-param -> listener -> filter -> servlet
對(duì)于某類(lèi)配置節(jié)而言,與它們出現(xiàn)的順序是有關(guān)的。以 filter 為例,web.xml 中當(dāng)然可以定義多個(gè) filter,與 filter 相關(guān)的一個(gè)配置節(jié)是 filter-mapping,這里一定要注意,對(duì)于擁有相同 filter-name 的 filter 和 filter-mapping 配置節(jié)而言,filter-mapping 必須出現(xiàn)在 filter 之后,否則當(dāng)解析到 filter-mapping 時(shí),它所對(duì)應(yīng)的 filter-name 還未定義。web 容器啟動(dòng)時(shí)初始化每個(gè) filter 時(shí),是按照 filter 配置節(jié)出現(xiàn)的順序來(lái)初始化的,當(dāng)請(qǐng)求資源匹配多個(gè) filter-mapping 時(shí),filter 攔截資源是按照 filter-mapping 配置節(jié)出現(xiàn)的順序來(lái)依次調(diào)用 doFilter() 方法的。
servlet 同 filter 類(lèi)似,此處不再贅述。
由此,可以看出,web.xml 的加載順序是:ServletContext ->context-param -> listener -> filter -> servlet ,而同個(gè)類(lèi)型之間的實(shí)際程序調(diào)用的時(shí)候的順序是根據(jù)對(duì)應(yīng)的 mapping 的順序進(jìn)行調(diào)用的。
四 web.xml文件詳解
我將自己知道的web.xml的元素整理了一下:
web.xml首先是肯定要包含它的schema.
1 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"4 version="2.4">5 6 </web-app>
其它的元素都放在<web-app></web-app>之中。
<discription></discription> 是對(duì)站臺(tái)的描述 <display-name></display-name> 定義站臺(tái)的名稱(chēng) <distributable/> 是指定該站臺(tái)是否可分布式處理
<context-param></context-param> 用來(lái)設(shè)定web站臺(tái)的環(huán)境參數(shù),它包含兩個(gè)子元素: <param-name></param-name> 用來(lái)指定參數(shù)的名稱(chēng) <param-value></param-value> 用來(lái)設(shè)定參數(shù)值。比如:
1 <context-param>2 <param-name>my_param</param-name>3 <param-value>hello</param-value>4 </context-param>
在此設(shè)定的參數(shù),可以在servlet中用 getServletContext().getInitParameter("my_param") 來(lái)取得
<filter></filter> 是用來(lái)聲明filter的相關(guān)設(shè)定,它包含以下子元素:
<filter-name></filter-name> 這當(dāng)然就是指定filter的名字
<filter-class></filter-class> 這是用來(lái)定義filter的類(lèi)的名稱(chēng)
<init-param></init-param> 用來(lái)定義參數(shù),它有兩個(gè)子元素:
<param-name></param-name> 用來(lái)指定參數(shù)的名稱(chēng)
<param-value></param-value> 用來(lái)設(shè)定參數(shù)值。
比如:
1 <filter>2 <filter-name>setCharacterEncoding</filter-name>3 <filter-class>com.myTest.setCharacterEncodingFilter</filter-class>4 <init-param>5 <param-name>encoding</param-name>6 <param-value>GB2312</param-value>7 </init-param>8 </filter>
與<filter></filter>同時(shí)使用的是<filter-mapping></filter-mapping> 用來(lái)定義filter所對(duì)應(yīng)的URL,它有兩個(gè)子元素:
<filter-name></filter-name> 指定filter的名字
<url-pattern></url-pattern> 指定filter所對(duì)應(yīng)的URL。
比如:
1 <filter-mapping>2 <filter-name>setCharacterEncoding</filter-name>3 <url-pattern>/*</url-pattern>4 </filter-mapping>
<listener></listener> 用來(lái)設(shè)定Listener接口,它的主要子元素為
<listener-class></listener-class> 定義Listener的類(lèi)名稱(chēng)
比如:
1 <listener>2 <listener-class>com.myTest.ContextListener</listener-class> 3 </listener>
<servlet></servlet> 用來(lái)聲明一個(gè)servlet的數(shù)據(jù),主要有以下子元素:
<servlet-name></servlet-name> 指定servlet的名稱(chēng)
<servlet-class></servlet-class> 指定servlet的類(lèi)名稱(chēng)
<jsp-file></jsp-file> 指定web站臺(tái)中的某個(gè)JSP網(wǎng)頁(yè)的完整路徑
<init-param></init-param> 用來(lái)定義參數(shù),和前面的<init-param>差不多
同樣,與<servlet></servlet>一起使用的是<servlet-mapping></servlet-mapping> 用來(lái)定義servlet所對(duì)應(yīng)的URL,包含兩個(gè)子元素:
<servlet-name></servlet-name> 指定servlet的名稱(chēng)
<url-pattern></url-pattern> 指定servlet所對(duì)應(yīng)的URL
比如:
1 <servlet>2 <servlet-name>ShoppingServlet</servlet-name>3 <servlet-class>com.myTest.ShoppingServlet</servlet-class>4 </servlet>5 6 <servlet-mapping>7 <servlet-name>ShoppingServlet</servlet-name>8 <url-pattern>/shop/ShoppingServlet</url-pattern>9 </servlet-mapping>
<session-config></session-config> 用來(lái)定義web站臺(tái)中的session參數(shù),包含一個(gè)子元素:
<session-timeout></session-timeout> 用來(lái)定義這個(gè)web站臺(tái)所有session的有效期限,單位為分鐘
<mime-mapping></mime-mapping> 定義某一個(gè)擴(kuò)展名和某一個(gè)MIME Type做對(duì)映,包含兩個(gè)子元素:
<extension></extension> 擴(kuò)展名的名稱(chēng)
<mime-type></mime-type> MIME格式
比如:
1 <mime-mapping>2 <extension>doc</extension>3 <mime-type>application/vnd.ms-Word</mime-type>4 </mime-mapping> 5 <mime-mapping>6 <extension>xls</extension>7 <mime-type>application/vnd.ms-Excel</mime-type>8 </mime-mapping>
<welcome-file-list></welcom-file-list> 用來(lái)定義首頁(yè)的列單,包含一個(gè)子元素:
<welcome-file></welcome-file> 指定首頁(yè)的文件名稱(chēng)
比如:
1 <welcome-file-list>2 <welcome-file>index.jsp</welcome-file>3 <welcome-file>index.html</welcome-file>4 </welcom-file-list>
<error-page></error-page> 用來(lái)處理錯(cuò)誤代碼或異常的頁(yè)面,有三個(gè)子元素:
<error-code></error-code> 指定錯(cuò)誤代碼
<exception-type></exception-type> 指定一個(gè)JAVA異常類(lèi)型
<location></location> 指定在web站臺(tái)內(nèi)的相關(guān)資源路徑
比如:
1 <error-page>2 <error-code>404</error-code>3 <location>/error404.jsp</location>4 </error-page>5 <error-page>6 <exception-type>java.lang.Exception</exception-type>7 <location>/exception.jsp</location>8 </error-page>
<taglib></taglib> 用來(lái)設(shè)定JSP網(wǎng)頁(yè)所用到的Tag Library路徑,有兩個(gè)子元素:
<taglib-uri></taglib-uri> 定義TLD文件的URI,在JSP網(wǎng)頁(yè)中用taglib指令便可取得該URI的TLD文件
<taglib-location></taglib-location> 指定TLD文件相對(duì)于web站臺(tái)的存放位置
比如:
1 <taglib>2 <taglib-uri>myTaglib</taglib-uri>3 <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>4 </taglib>
<resource-ref></resource-ref> 定義利用JNDI取得站臺(tái)可利用的資源,有五個(gè)子元素:
<description></description> 資源說(shuō)明
<rec-ref-name></rec-ref-name> 資源名稱(chēng)
<res-type></res-type> 資源種類(lèi)
<res-auth></res-auth> 資源經(jīng)由Application或Container來(lái)許可
<res-sharing-scope></res-sharing-scope> 資源是否可以共享,有Shareable和Unshareable兩個(gè)值,默認(rèn)為Shareable
比如,配置數(shù)據(jù)庫(kù)連接池就可在此配置:
1 <resource-ref>2 <description>JNDI JDBC DataSource of shop</description>3 <res-ref-name>jdbc/sample_db</res-ref-name>4 <res-type>javax.sql.DataSource</res-type>5 <res-auth>Container</res-auth>6 </resource-ref>
<jsp-config> 包括<taglib> 和<jsp-PRoperty-group> 兩個(gè)子元素。
其中<taglib>元素在JSP 1.2時(shí)就已經(jīng)存在;而<jsp-property-group>是JSP 2.0 新增的元素。
<jsp-property-group>元素主要有八個(gè)子元素,它們分別為:
1.<description>:設(shè)定的說(shuō)明;
2.<display-name>:設(shè)定名稱(chēng);
3.<url-pattern>:設(shè)定值所影響的范圍,如:/CH2 或 /*.jsp;
4.<el-ignored>:若為true,表示不支持EL 語(yǔ)法;
5.<scripting-invalid>:若為true,表示不支持<% scripting %>語(yǔ)法;
6.<page-encoding>:設(shè)定JSP 網(wǎng)頁(yè)的編碼;
7.<include-prelude>:設(shè)置JSP 網(wǎng)頁(yè)的抬頭,擴(kuò)展名為.jspf;
8.<include-coda>:設(shè)置JSP 網(wǎng)頁(yè)的結(jié)尾,擴(kuò)展名為.jspf。
一個(gè)簡(jiǎn)單的<jsp-config>元素完整配置:
1 <jsp-config> 2 <taglib> 3 <taglib-uri>Taglib</taglib-uri> 4 <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location> 5 </taglib> 6 <jsp-property-group> 7 <description>Special property group for JSP Configuration JSP example.</description> 8 <display-name>JSPConfiguration</display-name> 9 <url-pattern>/jsp/* </url-pattern>10 <el-ignored>true</el-ignored>11 <page-encoding>GB2312</page-encoding>12 <scripting-invalid>true</scripting-invalid>13 <include-prelude>/include/prelude.jspf</include-prelude>14 <include-coda>/include/coda.jspf</include-coda>15 </jsp-property-group>16 </jsp-config>
配置web.xml來(lái)限制對(duì)某些servlet的請(qǐng)求
有時(shí)我們只希望通過(guò)認(rèn)證的用戶(hù)才能請(qǐng)求某些servlet的話,就可以在web.xml中來(lái)進(jìn)行相應(yīng)的配置,來(lái)達(dá)到此目的。
這就要用到<security-constraint></security-constraint>元素。 對(duì)于tomcat,中web.xml使用security-constraint元素需要在位于<Tomcat-installation-directory>/conf/tomcat-users.xml的XML文件中創(chuàng)建用戶(hù)名和密碼。比如下面的這個(gè)tomcat-users.xml文件:
1 <?xml version='1.0' encoding='utf-8'?>2 <tomcat-users>3 <role rolename="tomcat"/>4 <role rolename="manager"/>5 <role rolename="admin"/>6 <user username="tomcat" password="tomcat" roles="tomcat"/>7 <user username="both" password="tomcat" roles="tomcat,manager"/>8 <user username="admin" password="admin" roles="admin"/>9 </tomcat-users>
此XML片段包括一個(gè)tomcat-users根元素,它包含一個(gè)或多個(gè)role和user元素。
然后在Web應(yīng)用程序的web.xml中創(chuàng)建security-constraint、login-config和security-role元素。
1 <security-constraint> 2 <web-resource-collection> 3 <web-resource-name>HelloServlet</web-resource-name> 4 <url-pattern>/HelloServlet</url-pattern> 5 <http-method>GET</http-method> 6 <http-method>POST</http-method> 7 </web-resource-collection> 8 <auth-constraint> 9 <description>This applies only to the "tomcat" security role</description>10 <role-name>admin</role-name>11 </auth-constraint>12 <user-data-constraint>13 <transport-guarantee>NONE</transport-guarantee>14 </user-data-constraint>15 </security-constraint>16 17 <login-config>18 <auth-method>BASIC</auth-method>19 </login-config>20 <security-role>21 <role-name>admin</role-name>22 </security-role>
其中security-constraint元素包含一個(gè)或多個(gè)web-resource-collection元素,它是描述Web應(yīng)用程序中的哪些web資源受到指定安全限制的保護(hù)。http-method元素指定安全限制覆蓋的HTTP方法。上面的例子中,當(dāng)我們對(duì)/HelloServlet的GET或POST請(qǐng)求時(shí)將觸發(fā)配置的安全機(jī)制。 auth-constraint元素用于描述允許訪問(wèn)Web組件的安全角色。此例中安全角色的例子有tomcat、manager、admin。而只有當(dāng)作為admin角色的用戶(hù)才可以訪問(wèn)HelloServlet。
Web應(yīng)用程序通過(guò)login-config元素來(lái)認(rèn)證用戶(hù),并確認(rèn)該用戶(hù)是否為正確的角色。 longin-config包含的transport-guarantee子元素用來(lái)指定認(rèn)證方法,BASIC是一種常見(jiàn)的Web認(rèn)證方式,瀏覽器給用戶(hù)提示一個(gè)對(duì)話框,要求輸入用戶(hù)名和密碼,隨后Tomcat將給出的用戶(hù)名和密碼與tomcat-users.xml中的用戶(hù)名和密碼進(jìn)行比較,然后使用前面的security-constraint配置來(lái)確定用戶(hù)是否可訪問(wèn)受保護(hù)的servlet。
(除BASIC外,還可以是FORM、CLIENT-CERT、DIGEST等)
其實(shí)這種認(rèn)證方法實(shí)際上有兩個(gè)步驟: 1、檢查提供的用戶(hù)名和密碼是否正確。 2、判斷用戶(hù)是否映射到特定的安全角色。例如,用戶(hù)可能提供了正確的用戶(hù)名和密碼,但沒(méi)有映射到特定的安全角色,也將被禁止訪問(wèn)特定的Web資源。
五 相應(yīng)元素配置1、Web應(yīng)用圖標(biāo):指出IDE和GUI工具用來(lái)表示W(wǎng)eb應(yīng)用的大圖標(biāo)和小圖標(biāo)
1 <icon> 2 <small-icon>/images/app_small.gif</small-icon> 3 <large-icon>/images/app_large.gif</large-icon> 4 </icon>
2、Web 應(yīng)用名稱(chēng):提供GUI工具可能會(huì)用來(lái)標(biāo)記這個(gè)特定的Web應(yīng)用的一個(gè)名稱(chēng)< display-name>Tomcat Example</display-name> 3、Web 應(yīng)用描述: 給出于此相關(guān)的說(shuō)明性文本< disciption>Tomcat Example servlets and JSP pages.</disciption> 4、上下文參數(shù):聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。
1 <context-param> 2 <param-name>ContextParameter</para-name> 3 <param-value>test</param-value> 4 <description>It is a test parameter.</description> 5 </context-param>
在servlet里面可以通過(guò)getServletContext().getInitParameter("context/param")得到5、過(guò)濾器配置:將一個(gè)名字與一個(gè)實(shí)現(xiàn)javaxs.servlet.Filter接口的類(lèi)相關(guān)聯(lián)。
1 <filter> 2 <filter-name>setCharacterEncoding</filter-name> 3 <filter-class>com.myTest.setCharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>GB2312</param-value> 7 </init-param> 8 </filter> 9 <filter-mapping> 10 <filter-name>setCharacterEncoding</filter-name> 11 <url-pattern>/*</url-pattern> 12 </filter-mapping>
6、監(jiān)聽(tīng)器配置
1 <listener> 2 <listerner-class>listener.SessionListener</listener-class> 3 </listener>
7、Servlet配置
基本配置
1 <servlet> 2 <servlet-name>snoop</servlet-name> 3 <servlet-class>SnoopServlet</servlet-class> 4 </servlet> 5 <servlet-mapping> 6 <servlet-name>snoop</servlet-name> 7 <url-pattern>/snoop</url-pattern> 8 </servlet-mapping>
高級(jí)配置
1 <servlet> 2 <servlet-name>snoop</servlet-name> 3 <servlet-class>SnoopServlet</servlet-class> 4 <init-param> 5 <param-name>foo</param-name> 6 <param-value>bar</param-value> 7 </init-param> 8 <run-as> 9 <description>Security role for anonymous access</description> 10 <role-name>tomcat</role-name> 11 </run-as> 12 </servlet> 13 <servlet-mapping> 14 <servlet-name>snoop</servlet-name> 15 <url-pattern>/snoop</url-pattern> 16 </servlet-mapping>
元素說(shuō)明 <servlet></servlet> 用來(lái)聲明一個(gè)servlet的數(shù)據(jù),主要有以下子元素: <servlet-name></servlet-name> 指定servlet的名稱(chēng) <servlet-class></servlet-class> 指定servlet的類(lèi)名稱(chēng) <jsp-file></jsp-file> 指定web站臺(tái)中的某個(gè)JSP網(wǎng)頁(yè)的完整路徑 <init-param></init-param> 用來(lái)定義參數(shù),可有多個(gè)init-param。在servlet類(lèi)中通過(guò)getInitParamenter(String name)方法訪問(wèn)初始化參數(shù) <load-on-startup></load-on-startup>指定當(dāng)Web應(yīng)用啟動(dòng)時(shí),裝載Servlet的次序。 當(dāng)值為正數(shù)或零時(shí):Servlet容器先加載數(shù)值小的servlet,再依次加載其他數(shù)值大的servlet. 當(dāng)值為負(fù)或未定義:Servlet容器將在Web客戶(hù)首次訪問(wèn)這個(gè)servlet時(shí)加載它 <servlet-mapping></servlet-mapping> 用來(lái)定義servlet所對(duì)應(yīng)的URL,包含兩個(gè)子元素 <servlet-name></servlet-name> 指定servlet的名稱(chēng) <url-pattern></url-pattern> 指定servlet所對(duì)應(yīng)的URL 8、會(huì)話超時(shí)配置(單位為分鐘)
1 <session-config> 2 <session-timeout>120</session-timeout> 3 </session-config>
9、MIME類(lèi)型配置
1 <mime-mapping> 2 <extension>htm</extension> 3 <mime-type>text/html</mime-type> 4 </mime-mapping>
10、指定歡迎文件頁(yè)配置
1 <welcome-file-list> 2 <welcome-file>index.jsp</welcome-file> 3 <welcome-file>index.html</welcome-file> 4 <welcome-file>index.htm</welcome-file> 5 </welcome-file-list>
11、配置錯(cuò)誤頁(yè)面一、 通過(guò)錯(cuò)誤碼來(lái)配置error-page
1 <error-page> 2 <error-code>404</error-code> 3 <location>/NotFound.jsp</location> 4 </error-page>
上面配置了當(dāng)系統(tǒng)發(fā)生404錯(cuò)誤時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁(yè)面NotFound.jsp。二、通過(guò)異常的類(lèi)型配置error-page
1 <error-page> 2 <exception-type>java.lang.NullException</exception-type> 3 <location>/error.jsp</location> 4 </error-page>
上面配置了當(dāng)系統(tǒng)發(fā)生java.lang.NullException(即空指針異常)時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁(yè)面error.jsp 12、TLD配置
1 <taglib> 2 <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri> 3 <taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location> 4 </taglib>
如果MyEclipse一直在報(bào)錯(cuò),應(yīng)該把<taglib> 放到 <jsp-config>中
1 <jsp-config> 2 <taglib> 3 <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri> 4 <taglib-location>/WEB-INF/pager-taglib.tld</taglib-location> 5 </taglib> 6 </jsp-config>
13、資源管理對(duì)象配置
1 <resource-env-ref> 2 <resource-env-ref-name>jms/StockQueue</resource-env-ref-name> 3 </resource-env-ref>
14、資源工廠配置
1 <resource-ref> 2 <res-ref-name>mail/Session</res-ref-name> 3 <res-type>javax.mail.Session</res-type> 4 <res-auth>Container</res-auth> 5 </resource-ref>
配置數(shù)據(jù)庫(kù)連接池就可在此配置:
1 <resource-ref> 2 <description>JNDI JDBC DataSource of shop</description> 3 <res-ref-name>jdbc/sample_db</res-ref-name> 4 <res-type>javax.sql.DataSource</res-type> 5 <res-auth>Container</res-auth> 6 </resource-ref>
15、安全限制配置
1 <security-constraint> 2 <display-name>Example Security Constraint</display-name> 3 <web-resource-collection> 4 <web-resource-name>Protected Area</web-resource-name> 5 <url-pattern>/jsp/security/protected/*</url-pattern> 6 <http-method>DELETE</http-method> 7 <http-method>GET</http-method> 8 <http-method>POST</http-method> 9 <http-method>PUT</http-method> 10 </web-resource-collection> 11 <auth-constraint> 12 <role-name>tomcat</role-name> 13 <role-name>role1</role-name> 14 </auth-constraint> 15 </security-constraint>
16、登陸驗(yàn)證配置
1 <login-config> 2 <auth-method>FORM</auth-method> 3 <realm-name>Example-Based Authentiation Area</realm-name> 4 <form-login-config> 5 <form-login-page>/jsp/security/protected/login.jsp</form-login-page> 6 <form-error-page>/jsp/security/protected/error.jsp</form-error-page> 7 </form-login-config> 8 </login-config>
17、安全角色:security-role元素給出安全角色的一個(gè)列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級(jí)IDE處理安全信息更為容易。
1 <security-role> 2 <role-name>tomcat</role-name> 3 </security-role>
18、Web環(huán)境參數(shù):env-entry元素聲明Web應(yīng)用的環(huán)境項(xiàng)
1 <env-entry> 2 <env-entry-name>minExemptions</env-entry-name> 3 <env-entry-value>1</env-entry-value> 4 <env-entry-type>java.lang.Integer</env-entry-type> 5 </env-entry>
19、EJB 聲明
1 <ejb-ref> 2 <description>Example EJB reference</decription> 3 <ejb-ref-name>ejb/Account</ejb-ref-name> 4 <ejb-ref-type>Entity</ejb-ref-type> 5 <home>com.mycompany.mypackage.AccountHome</home> 6 <remote>com.mycompany.mypackage.Account</remote> 7 </ejb-ref>
20、本地EJB聲明
1 <ejb-local-ref> 2 <description>Example Loacal EJB reference</decription> 3 <ejb-ref-name>ejb/ProcessOrder</ejb-ref-name> 4 <ejb-ref-type>Session</ejb-ref-type> 5 <local-home>com.mycompany.mypackage.ProcessOrderHome</local-home> 6 <local>com.mycompany.mypackage.ProcessOrder</local> 7 </ejb-local-ref>
21、配置DWR
1 <servlet> 2 <servlet-name>dwr-invoker</servlet-name> 3 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> 4 </servlet> 5 <servlet-mapping> 6 <servlet-name>dwr-invoker</servlet-name> 7 <url-pattern>/dwr/*</url-pattern> 8 </servlet-mapping>
22、配置Struts
1 <display-name>Struts Blank Application</display-name> 2 <servlet> 3 <servlet-name>action</servlet-name> 4 <servlet-class> 5 org.apache.struts.action.ActionServlet 6 </servlet-class> 7 <init-param> 8 <param-name>detail</param-name> 9 <param-value>2</param-value> 10 </init-param> 11 <init-param> 12 <param-name>debug</param-name> 13 <param-value>2</param-value> 14 </init-param> 15 <init-param> 16 <param-name>config</param-name> 17 <param-value>/WEB-INF/struts-config.xml</param-value> 18 </init-param> 19 <init-param> 20 <param-name>application</param-name> 21 <param-value>ApplicationResources</param-value> 22 </init-param> 23 <load-on-startup>2</load-on-startup> 24 </servlet> 25 <servlet-mapping> 26 <servlet-name>action</servlet-name> 27 <url-pattern>*.do</url-pattern> 28 </servlet-mapping> 29 <welcome-file-list> 30 <welcome-file>index.jsp</welcome-file> 31 </welcome-file-list> 32 33 <!-- Struts Tag Library Descriptors --> 34 <taglib> 35 <taglib-uri>struts-bean</taglib-uri> 36 <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location> 37 </taglib> 38 <taglib> 39 <taglib-uri>struts-html</taglib-uri> 40 <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location> 41 </taglib> 42 <taglib> 43 <taglib-uri>struts-nested</taglib-uri> 44 <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location> 45 </taglib> 46 <taglib> 47 <taglib-uri>struts-logic</taglib-uri> 48 <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location> 49 </taglib> 50 <taglib> 51 <taglib-uri>struts-tiles</taglib-uri> 52 <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location> 53 </taglib>
23、配置Spring(基本上都是在Struts中配置的)
1 <!-- 指定spring配置文件位置 --> 2 <context-param> 3 <param-name>contextConfigLocation</param-name> 4 <param-value> 5 <!--加載多個(gè)spring配置文件 --> 6 /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml 7 </param-value> 8 </context-param> 9 10 <!-- 定義SPRING監(jiān)聽(tīng)器,加載spring --> 11 12 <listener> 13 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 14 </listener> 15 16 <listener> 17 <listener-class> 18 org.springframework.web.context.request.RequestContextListener 19 </listener-class> 20 </listener>
其他說(shuō)明:
web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他們是按照一個(gè)什么順序加載呢?加載順序會(huì)影響對(duì)spring bean 的調(diào)用。
比如filter 需要用到 bean ,但是加載順序是 先加載filter 后加載spring,則filter中初始化操作中的bean為null;
首先可以肯定 加載順序與他們?cè)趙eb.xml 文件中的先后順序無(wú)關(guān)。
web.xml 中 listener 和 serverlet 的加載順序?yàn)?先 listener 后serverlet
最終得出結(jié)果:先 listener >> filter >> servlet >>spring
所以,如果過(guò)濾器中要使用到 bean,可以將spring 的加載 改成 Listener的方式
1 <listener>2 <listener-class>3 org.springframework.web.context.ContextLoaderListener4 </listener-class>5 </listener>
關(guān)于他們的內(nèi)部執(zhí)行順序,也需要注意,如下面文章中遇到的問(wèn)題
web.xml的filter執(zhí)行順序?qū)е碌膩y碼,切記!
發(fā)現(xiàn)引起bug的原因是web.xml的下面幾行:
1 <filter-mapping> 2 <filter-name>SecurityFilter</filter-name> 3 <url-pattern>*.do</url-pattern> 4 </filter-mapping> 5 6 <filter-mapping> 7 <filter-name>CharacterEncoding</filter-name> 8 <url-pattern>*.do</url-pattern> 9 </filter-mapping>10 11 <filter-mapping>12 <filter-name>CharacterEncoding</filter-name>13 <url-pattern>*.jsp</url-pattern>14 </filter-mapping>
根據(jù)servlet2.3規(guī)范filter執(zhí)行是按照web.xml配置的filter-mapping先后順序進(jìn)行執(zhí)行,所以上面的配置會(huì)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注