【JavaWeb探究】細摳一下web.xml

     在JavaWeb裏面,我們十分熟知的一個配置文件莫過於WEB-INF下的web.xml了,JavaWeb應用的配置信息都存放在這個配置文件裏,Servlet容器從該配置文件中讀取配置信息。在發佈某些Web組件時,需要在web.xml裏面添加相應的關於這些Web組件的配置信息。web.xml很重要,今天我們就來好好的細摳一下里面到底幾斤幾兩。


*****配置過濾器:filter

     對於Servlet容器接收到的客戶請求,以及發出的響應結果,過濾器都能檢查和修改其中的信息。在Web應用中加入過濾器需要在web.xml中配置兩個元素:<filter>和<filter-mapping>。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><filter>
      <filter-name>SampleFilter</filter-name>
      <filter-class>mypack.SampleFilter</filter-class>
</filter></span>
     以上定義了一個過濾器,名爲SampleFilter,實現這個過濾器的類是mypack.SampleFilter類。其中,<filter-name>定義過濾器的名字,當web應用中有多個過濾器時,不允許過濾器重名。<filter-class>指定實現這一過濾器的類,這個類負責具體的過濾事務。
<span style="font-family:KaiTi_GB2312;font-size:18px;">filter-mapping>
      <filter-name>SampleFilter</filter-name>
      <url-pattern>*.jsp</url-pattern>
</filter-mapping></span>
     以上代碼指明當客戶請求訪問web應用中的所有jsp文件時,將觸發SampleFilter過濾器工作,,具體的過濾事務由在<filter>元素中指定的mypack.SampleFilter類完成。<filter-mapping>元素用來設定過濾器負責過濾的URL。其中,<filter-name>指定過濾器名,這裏的過濾器名必須和<filter>元素中定義的過濾器名匹配。<url-pattern>指定過濾器負責過濾的URL。


*****配置Servlet

     <servlet>元素用來定義Servlet,以下代碼定義了一個名爲SampleServlet的Servlet,實現這個Servlet的類是mypack.SampleServlet

<span style="font-family:KaiTi_GB2312;font-size:18px;"><servlet>
    <servlet-name>SampleServlet</servlet-name>
    <servlet-class>mypack.SampleServlet</servlet-class>
    <init-param>
        <param-name>initParam1</param-name>
        <param-value>2</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet></span>
    * <servlet-name>定義Servlet名字,

    * <servlet-class>指定實現這個Servlet的類。

    * <init-param>定義Servlet的初始化參數(包括參數名和參數值),在一個<servlet>元素中可以有多個<init-param>。在Servlet類中通過getInitParamter(String name)方法訪問初始化參數。

    * <load-on-startup>指定當web應用啓動時,加載Servlet的次序。當這個值爲正數或者零時,Servlet容器先加載數值小的Servlet,再一次加載其他數值大的Servlet。如果這個值爲負數或者沒有設定時,那麼Servlet容器將在Web客戶首次訪問這個Servlet時加載它。

     配置Servlet映射。<servlet-mapping>元素用來設定客戶訪問某個Servlet的URL。以下代碼爲SampleServlet指定URL爲“/sample”:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><servlet-mapping>
    <servlet-name>SampleServlet</servlet-name>
    <url-pattern>/sample</url-pattern>
</servlet-mapping></span>
     <servlet-mapping>使得程序中定義的Servlet類名和客戶訪問的URL彼此獨立,當Servlet類名發生變化時,只要修改<servlet>元素中的<servlet-class>子元素就行,而客戶端訪問Servlet的URL無須做相應的改動。

    * <servlet-name>指定Servlet名字,這裏的Servlet名字應該和<servlet>元素中定義的名字匹配。

    * <url-pattern>指定訪問這個Servlet的URL,這裏只需要給出相對於整個Web應用的URL路徑。


    

*****配置Session

     <session-config>元素用來設定HTTP Session的生命週期,例如,以下代碼指明Session可以保持不活動狀態的最長時間爲30s,超過這一時間Servlet容器就把它作爲無效Session處理。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;"><session-config>
    <session-timeout>30</session-timeout>
</session-config></span></span>
     <session-config>元素只包括一個子元素<session-timeout>,它用來設定Session可以保持不活動狀態的最長時間,這裏採用的時間單位爲秒。


*****配置welcome文件清單

     當客戶訪問web應用時,如果僅僅給出Web應用的Root URL,沒有指定具體的文件名,Servlet容器會自動調用Web應用的Welcome文件。<welcome-file-list>元素用來設定Welcome文件清單,在以下代碼中聲明瞭兩個Welcome文件,login.jsp和index.htm。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
</welcome-file-list></span>
     在<welcome-file-list>元素中可以包含多個<welcome-file>,當Servlet容器調用Web應用的Welcome文件時,會首先尋找第一個<welcome-file>指定的文件,如果這個文件存在,那麼把第一個文件返回給客戶;如果這個文件不存在,Servlet容器將依次尋找下一個Welcome文件,直到找到爲止。如果<welcome-file-list>元素中的指定的所有文件都不存在,服務器將向客戶端返回“HTTP 404 Not Found”的錯誤信息。


*****配置Tag Library

     <taglib>元素用來設置web應用所引用的Tag Library,以下代碼聲明引用了mytaglib標籤庫,它對應的TLD文件爲/WEB-INF/mytaglib.tld

<span style="font-family:KaiTi_GB2312;font-size:18px;"><taglib>
    <taglib-uri>/mytaglib</taglib-uri>
    <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
</taglib></span>
    * <taglib-uri>設定Tag Library的唯一標識符,在Web應用中將根據這一標識符來引用Tag Library

    * <taglib-location>指定和Tag Library對應的TLD文件的位置


*****配置資源引用

     如果Web應用訪問了由Servlet容器管理的某個JNDI Resource,則必須在web.xml文件中聲明對這個JNDI Resource的引用,表示資源引用的元素爲<resource-ref>,以下是聲明引用JDBC/SampleDB數據源的代碼。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/sampleDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref></span>
    * <descrption>對所引用的資源的說明

    * <res-ref-name>指定所引用資源的JNDI名字

    * <res-type>指定所引用資源的類名稱

    * <res-auth>指定管理所引用資源的Manager


*****配置安全約束

     <security-constraint>用來爲web應用定義安全約束,以下代碼指明當用戶訪問該web應用下的所有資源時,必須具備guest角色。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><security-constraint>
    <web-resource-collection>
        <web-resource-name>sample application</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>guest</role-name>
    </auth-constraint>
</security-constraint></span>
    * <web-resource-collection>聲明受保護的Web資源

    * <auth-constraint>聲明可以訪問受保護的資源角色,可以包含多個<role-name>子元素

    * <web-resource-name>標識受保護的web資源

    * <url-pattern>指定受保護的URL路徑


*****配置安全驗證登錄界面

     <login-config>元素指定當Web客戶訪問受保護的Web資源時,系統彈出的登錄對話框的類型,以下代碼配置了基於表單驗證的登錄界面。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Form-Based Authentication Area</realm-name>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config></span>
    * <auth-method>指定驗證方法,它有三個可選值:BASIC(基本驗證)、DIGEST(摘要驗證)和FORM(基於表單的驗證)

    * <realm-name>設定安全域的名稱

    * <form-login-config>當驗證方法爲FORM時,配置驗證網頁和出錯網頁

    * <form-login-page>當驗證方法爲FORM時,設定驗證網頁

    * <form-error-page>當驗證方法爲FORM時,設定出錯網頁

     最後要強調的是,在web.xml中,元素定義的先後順序不能顛倒,否則tomcat服務器可能會拋出SAXParseException異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章