J2ee入門:servlet-mapping的映射配置

來源:互聯網
上載者:User

標籤:login   startup   url   沒有   order   指定   dmi   -o   選擇   

<servlet-mapping>元素在Servlet和URL樣式之間定義一個映射。它包含了兩個子項目<servlet- name>和<url-pattern>

<servlet-name>元素給出的Servlet名字必須是 在<servlet>元素中聲明過的Servlet的名字

<url-pattern>元素指定對應於Servlet的URL路 徑,該路徑是相對於Web應用程式上下文根的路徑。

Servlet 2.5規範允許<servlet-mapping>的<url-pattern>子項目出現多次,之前的規範只允許一 個<servlet-mapping>元素包含一個<url-pattern>子項目。

例如:

<servlet-mapping>

    <servlet-name>helloworld</servlet-name>

    <url-pattern>/hello</url-pattern>

    <url-pattern>/hello</url-pattern> 

</servlet-mapping> 

 

我們看下面的例子:

在配置了Servlet與URL樣式之間的映射後,當Servlet容器接收到一個請求,它首先確定該請求應該由哪一個Web應用程式來響應。

這是通過比較請求URI的開始部分與Web應用程式的上下文路徑來確定的。

映射到Servlet的路徑是請求URI減去內容相關的路徑,Web應用程式的 Context對象在去掉請求URI的上下文路徑後,將按照下面的路徑映射規則的順序對剩餘部分的路徑進行處理,並且在找到第一個成功的匹配後,不再進行 下一個匹配。

1、容器試著對請求的路徑和Servlet映射的路徑進行精確匹配,如果匹配成功,則調用這個Servlet來處理請求。

2、容器試著匹配最長的路徑首碼,以斜杠(/)為路徑分隔字元,按照路徑樹逐級遞減匹配,選擇最長相符的Servlet來處理請求。

3、如果請求的URL路徑最後有副檔名,如.jsp,Servlet容器會試著匹配處理這個副檔名的Servlet。

如果按照前面3條規則沒有找到匹配的Servlet,容器會調用Web應用程式預設的Servlet來對請求進行處理,如果沒有定義預設的Servlet,容器將向用戶端發送HTTP 404錯誤資訊(請求資源不存在)。

 

在部署描述符中,可以使用下面的文法來定義映射。

以/開始並且以 /* 結束的字串用來映射路徑,例如:

<url-pattern>/admin/*</url-pattern> 


以 *. 為首碼的字串用來映射副檔名,例如:如果沒有精確匹配,那麼對/admin/路徑下的資源的所有請求將由映射了上述URL樣式的Servlet來處理。

<url-pattern>*.do</url-pattern>


以一個單獨的/指示這個Web應用程式預設的Servlet,例如:如果沒有精確匹配和路徑匹配,那麼對具有.do副檔名的資源的請求將由映射了上述URL樣式的Servlet來處理。

<url-pattern>/</url-pattern> 


所有其他的字元被用於精確匹配,例如:如果對某個請求沒有找到匹配的Servlet,那麼將使用Web應用程式的預設Servlet來處理。

<url-pattern>/login</url-pattern> 


下面我們看幾個請求映射的例子,如表3-2和表3-3所示。如果請求/login,那麼將由映射了URL樣式/login的Servlet來處理。

表3-2 Servlet映射

映射的 URL 對應的Servlet
/hello servlet1
/bbs/admin/* servlet2
/bbs/* servlet3
*.jsp servlet4
/ servlet5

表3-3 實際請求映射的結果

去掉上下文路徑的剩餘路徑 處理請求的Servlet
/hello servlet1
/bbs/admin/login servlet2
/bbs/admin/index.jsp servlet2
/bbs/display servlet3
/bbs/index.jsp servlet3
/bbs servlet3
/index.jsp servler4
/hello/index.jsp servlet4
/hello/index.html servlet5
/news servlet5

Tomcat在%CATALINA_HOME%\conf\web.xml檔案中配置了預設的Servlet,配置代碼如下:


<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>


%CATALINA_HOME%\conf\web.xml檔案中的配置將被運行在同一個Tomcat執行個體中的所有Web應用程式所共用。

J2ee入門:servlet-mapping的映射配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.