web.xml中servlet配置及其含義


前言:


 每個javaEE工程中都有web.xml文件,那么它的作用是什么呢?它是每個web.xml工程都必須的嗎? 

一個web中可以沒有web.xml文件,也就是說,web.xml文件並不是web工程必須的。 
web.xml文件是用來初始化配置信息:比如Welcome頁面、servlet、servlet-mapping、filter、listener、啟動加載級別等。

當你的web工程沒用到這些時,你可以不用web.xml文件來配置你的Application。

 每個xml文件都有定義它書寫規則的Schema文件,也就是說javaEE的定義web.xml所對應的xml Schema文件中定義了多少種標簽元素,web.xml中就可以出現它所定義的標簽元素,也就具備哪些特定的功能。web.xml的模式文件是由Sun 公司定義的,每個web.xml文件的根元素為<web-app>中,必須標明這個web.xml使用的是哪個模式文件。如: 

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

    web.xml的模式文件中定義的標簽並不是定死的,模式文件也是可以改變的,一般來說,隨着web.mxl模式文件的版本升級,里面定義的功能會越來越復雜,標簽元素的種類肯定也會越來越多,但有些不是很常用的,我們只需記住一些常用的並知道怎么配置就可以了。

下面列出web.xml我們常用的一些標簽元素及其功能:

1.指定歡迎頁面:

<welcome-file-list> 
  <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index1.jsp</welcome-file> 
  </welcome-file-list> 
PS:指定了2個歡迎頁面,顯示時按順序從第一個找起,如果第一個存在,就顯示第一個,后面的不起作用。如果第一個不存在,就找第二個,以此類推。

2、命名與定制URL。我們可以為Servlet和JSP文件命名並定制URL,其中定制URL是依賴命名的,命名必須在定制URL前。下面拿serlet來舉例:

(1)、為Servlet命名: 
<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>org.whatisjava.TestServlet</servlet-class> 
</servlet> 

(2)、為Servlet定制URL、 
<servlet-mapping> 
    <servlet-name>servlet1</servlet-name> 
    <url-pattern>*.do</url-pattern> 
</servlet-mapping>

3、定制初始化參數:可以定制servlet、JSP、Context的初始化參數,然后可以再servlet、JSP、Context中獲取這些參數值。

<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>org.whatisjava.TestServlet</servlet-class> 
    <init-param> 
          <param-name>userName</param-name> 
          <param-value>Daniel</param-value> 
    </init-param> 
    <init-param> 
          <param-name>E-mail</param-name> 
          <param-value>125485762@qq.com</param-value> 
    </init-param> 
</servlet> 
經過上面的配置,在servlet中能夠調用getServletConfig().getInitParameter("param1")獲得參數名對應的值。 

4、指定錯誤處理頁面,可以通過“異常類型”或“錯誤碼”來指定錯誤處理頁面。

<error-page> 
    <error-code>404</error-code> 
    <location>/error404.jsp</location> 
</error-page> 
----------------------------- 
<error-page> 
    <exception-type>java.lang.Exception<exception-type> 
    <location>/exception.jsp<location> 
</error-page> 

5、設置過濾器:比如設置一個編碼過濾器,過濾所有資源 

<filter> 
    <filter-name>XXXCharaSetFilter</filter-name> 
    <filter-class>net.test.CharSetFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>XXXCharaSetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

6、設置監聽器: 

<listener> 
<listener-class>net.test.XXXLisenet</listener-class> 
</listener> 

7、設置會話(Session)過期時間,其中時間以分鍾為單位,假如設置60分鍾超時: 

<session-config> 
<session-timeout>60</session-timeout> 
</session-config>

 

Servlet配置及含義:


 

這里其實最想說的是配置中各個節點含義:

<!-- 配置一個servlet -->
<!-- servlet的配置 -->
<servlet>
    <!-- servlet的內部名稱,自定義。盡量有意義 -->
    <servlet-name>ServletDemo</servlet-name>
    <!-- servlet的類全名: 包名+簡單類名 -->
    <servlet-class>lm.practice.ServletDemo</servlet-class>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
    <!-- servlet的內部名稱,一定要和上面的內部名稱保持一致!! -->
    <servlet-name>ServletDemo</servlet-name>
    <!-- servlet的映射路徑(訪問servlet的名稱) -->
    <url-pattern>/servlet</url-pattern>
</servlet-mapping>

可以看到,在配置Servlet時,有兩個地方需要配置,一個是<servlet>,另一個是<servlet-Mapping>,這兩個一個是配置Servlet,一個是配置其映射信息,其中<servlet>中的<servlet-name>可以隨意指定,但要有一定的意義,一般取為類的名稱,例如我的類名為ServletDemo,這里取名為ServletDemo,下面的<servlet-class>是類的全路徑,package+calssname,一定要是全路徑!

<servlet-Mapping>是映射信息,它也有一個<servlet-name>,里面的名字是對應的Servlet名,也就是我們上面配置的Servlet名字,這里是ServletDemo,下面的是映射路徑,也就是訪問Servlet的名稱,這里也是以方便和有意義為前提的,是我們在訪問Servlet在瀏覽器地址欄后面輸入的那個信息,例如我的映射路徑命名為/servlet,在地址欄中輸入http://localhost/20170323/servlet

注意:這里的映射路徑一定不是丟掉/,否則就會出錯了,一定要寫成/servlet,不能是servlet

這里說一下在配置映射路徑的時候,有以下兩種:

   url-pattern 

瀏覽器輸入

 

精確匹配   /servlet http://localhost:8080/day10/servlet
模糊匹配    /* http://localhost:8080/20170323/任意路徑
/lm/* http://localhost:8080/20170323/lm/任意路徑

*.后綴名

 *.do

 *.action

 *.html(偽靜態)

  http://localhost:8080/20170323/任意路徑.do

 

 

 

 

 

 

 

 

 

下面是項目中web.xml文件中springmvc的Servlet配置信息:


 

<!-- Spring MVC servlet -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!-- 此處可以可以配置成*.do,對應struts的后綴習慣 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
     

  <servlet> <servlet-name>jobDispatcherServlet</servlet-name> <servlet-class>com.suning.framework.uts.client.core.JobDispatcherServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jobDispatcherServlet</servlet-name> <url-pattern>/jobDispatcher</url-pattern> </servlet-mapping>

<session-config>    <session-timeout>30</session-timeout> </session-config>

【注意】:

  1)url-pattern要么以 / 開頭,要么以*開頭。  絕對不能漏掉斜杠!!!!!!!!!

  2)不能同時使用兩種模糊匹配,例如 /lm/*.do是非法路徑

  3)當有輸入的URL有多個servlet同時被匹配的情況下:

                    3.1 精確匹配優先。(長的最像優先被匹配)

                    3.2 以后綴名結尾的模糊匹配先級最低!!!

 

參考文章


 

1、web.xml文件的作用:https://www.cnblogs.com/yqskj/articles/2233061.html

2、web.xml中servlet配置及其含義:https://blog.csdn.net/m0_37630602/article/details/65443660


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM