首頁  >  文章  >  後端開發  >  web.xml文件內容詳細分析

web.xml文件內容詳細分析

Y2J
Y2J原創
2017-04-24 10:49:061953瀏覽

web.xml檔案詳解

#  前言:一般的web工程都會用到web.xml,web .xml主要用來配置,可以方便的開發web工程。 web.xml主要用來設定Filter、Listener、Servlet等。但是要說明的是web.xml並不是必須的,一個web工程可以沒有web.xml檔。

1、WEB工程載入web.xml流程

  經過個人測試,WEB工程載入順序與元素節點在檔案中的配置順序無關。即不會因為 filter 寫在 listener 的前面而會先載入 filter。 WEB容器的載入順序是:ServletContext -> context-param -> listener -> filter -> servlet。並且這些元素可以配置在文件中的任意位置。

  載入過程順序如下:

  1. #啟動一個WEB專案的時候,WEB容器會去讀取它的設定檔web.xml,讀取兩個結點。 

  2. 緊急著,容創建一個ServletContext(servlet上下文),這個web專案的所有部分都將共享這個上下文。 

  3. 容器將轉換為鍵值對,並交給servletContext。 

  4. 容器建立中的類別實例,建立監聽器。

2、web.xml檔案元素詳解

1、schema

  web.xml的模式檔案是由Sun公司定義的,每個web.xml檔案的根元素中,都必須標示這個web.xml使用的是哪個模式檔。其它的元素都放在之中。

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></web-app>

  2、Web應用圖示

  指出IDE與GUI工具用來表示Web應用的大圖標和小圖標。

<icon>
    <small-icon>/images/app_small.gif</small-icon>
    <large-icon>/images/app_large.gif</large-icon></icon>

  3、Web應用程式名稱

  提供GUI工具可能會用來標記這個特定的Web應用的一個名稱

<display-name>Tomcat Example</display-name>

  4、Web應用描述

  給於此相關的說明性文字

<disciption>Tomcat Example servlets and JSP pages.</disciption>

  5、上下文參數

  聲明應用範圍內的初始化參數。它用於向 ServletContext提供鍵值對,即應用程式上下文資訊。我們的listener, filter等初始化時會用到這些上下文中的信息。在servlet裡面可以透過getServletContext().getInitParameter("context/param")得到。

<context-param>
    <param-name>ContextParameter</para-name>
    <param-value>test</param-value>
    <description>It is a test parameter.</description></context-param>

  6、過濾器

##  將一個名字與一個實現一個實作xs.servlet.Filter介面的類別相關聯。

<filter>
    <filter-name>setCharacterEncoding</filter-name>
    <filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param></filter><filter-mapping>
    <filter-name>setCharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern></filter-mapping>

  7、監聽器

<listener> 
    <listerner-class>com.listener.SessionListener</listener-class> </listener>

  8、

#   用來宣告一個servlet的數據,主要有以下子元素:

  • # 指定servlet的名稱

  • ## 指定servlet的類別名稱

  • 指定web站台中的某個JSP網頁的完整路徑

  • 用來定義參數,可有多個init-param。在servlet類別中透過getInitParamenter(String name)方法存取初始化參數

  • 指定当Web应用启动时,装载Servlet的次序。当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。

  • 用来定义servlet所对应的URL,包含两个子元素

  • 指定servlet的名称

  • 指定servlet所对应的URL

<!-- 基本配置 --><servlet>
    <servlet-name>snoop</servlet-name>
    <servlet-class>SnoopServlet</servlet-class></servlet><servlet-mapping>
    <servlet-name>snoop</servlet-name>
    <url-pattern>/snoop</url-pattern></servlet-mapping><!-- 高级配置 --><servlet>
    <servlet-name>snoop</servlet-name>
    <servlet-class>SnoopServlet</servlet-class>
    <init-param>
        <param-name>foo</param-name>
        <param-value>bar</param-value>
    </init-param>
    <run-as>
        <description>Security role for anonymous access</description>
        <role-name>tomcat</role-name>
    </run-as></servlet><servlet-mapping>
    <servlet-name>snoop</servlet-name>
    <url-pattern>/snoop</url-pattern></servlet-mapping>

  9、会话超时配置

  单位为分钟。

<session-config>
    <session-timeout>120</session-timeout></session-config>

  10、

<mime-mapping>
    <extension>htm</extension>
    <mime-type>text/html</mime-type></mime-mapping>

  11、欢迎文件页

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file></welcome-file-list>

  12、错误页面

<!-- 1、通过错误码来配置error-page。当系统发生×××错误时,跳转到错误处理页面。 --><error-page>
    <error-code>404</error-code>
    <location>/NotFound.jsp</location></error-page><!-- 2、通过异常的类型配置error-page。当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面。 --><error-page>
    <exception-type>java.lang.NullException</exception-type>
    <location>/error.jsp</location></error-page>

  13、设置jsp

   包括  和  两个子元素。其中 元素在JSP 1.2 时就已经存在;而 是JSP 2.0 新增的元素。

   元素主要有八个子元素,它们分别为:

  • :设定的说明 

  • :设定名称 

  • :设定值所影响的范围,如: /CH2 或 /*.jsp

  • :若为 true,表示不支持 EL 语法 

  • :若为 true,表示不支持 <% scripting %>语法 

  • :设定 JSP 网页的编码 

  • :设置 JSP 网页的抬头,扩展名为 .jspf

  • :设置 JSP 网页的结尾,扩展名为 .jspf

<jsp-config>
    <taglib>
        <taglib-uri>Taglib</taglib-uri>
        <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
    </taglib>
    <jsp-property-group>
        <description>Special property group for JSP Configuration JSP example.</description>
        <display-name>JSPConfiguration</display-name>
        <url-pattern>/jsp/* </url-pattern>
        <el-ignored>true</el-ignored>
        <page-encoding>GB2312</page-encoding>
        <scripting-invalid>true</scripting-invalid>
        <include-prelude>/include/prelude.jspf</include-prelude>
        <include-coda>/include/coda.jspf</include-coda>
    </jsp-property-group></jsp-config>

  对于Web 应用程式来说,Scriptlet 是个不乐意被见到的东西,因为它会使得HTML 与Java 程式码交相混杂,对于程式的维护来说相当的麻烦,必要的时候,可以在web.xml 中加上 标签,设定所有的JSP 网页都不可以使用Scriptlet。

3、Mapping规则

  当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。

  其匹配规则和顺序如下:

  1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。

  2. 最長路徑匹配。範例:servletA的url-pattern為/test/*,而servletB的url-pattern為/test/a/*,此時造訪http://localhost/test/a時,容器會選擇路徑最長的servlet來匹配,也就是這裡的servletB。

  3. 擴展匹配,如果url最後一段包含擴展,容器將會根據擴展選擇合適的servlet。範例:servletA的url-pattern:*.action

#  以」/'開頭和以」/*」結尾的是用來做路徑映射的。以前綴”*.”開頭的是用來做擴展映射的。 所以,為什麼定義”/*.action”這樣一個看起來很正常的匹配會錯?導致容器無法判斷。

以上是web.xml文件內容詳細分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn