2012-12-24 28 views
39

我已經爲我的應用程序手動配置了web.xml。現在,我在運行我的應用程序時遇到了問題。我正在嘗試從我的jsp頁面訪問我的servlet。但是,這是拋出錯誤爲page not foundweb.xml中url模式的重要性以及如何配置servlet?

的servlet被下面的文件夾位置劃歸

<application folder>/WEB-INF/classes/<package> 

那麼,究竟應該在url-patternservlet-mapping對servlet的條目。因此,servlet可以通過URL訪問。

+0

第一讀取servlet規範和映射。請參閱@var_給出的答案。如果您再次遇到問題或異常,請粘貼相關異常,社區將嘗試調試該問題。 –

+1

您應該接受讓社區從中受益的答案。 –

回答

64

url-pattern用於web.xmlservlet映射到特定的URL。請參閱下面的xml代碼,您可以在您的web.xml配置文件中找到類似的代碼。

<servlet> 
    <servlet-name>AddPhotoServlet</servlet-name> //servlet name 
    <servlet-class>upload.AddPhotoServlet</servlet-class> //servlet class 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddPhotoServlet</servlet-name> //servlet name 
    <url-pattern>/AddPhotoServlet</url-pattern> //how it should appear 
</servlet-mapping> 

如果從/AddPhotoServlet改變AddPhotoServleturl-pattern/MyUrl。然後,AddPhotoServlet servlet可以通過使用/MyUrl訪問。出於安全原因,您想要隱藏您的實際頁面URL。

的Java Servlet url-pattern規格:

  1. 的字符串開始與'/'字符,並用'/ *' 後綴結束用於路徑映射。
  2. '*。'開始的字符串。 前綴用作擴展映射。
  3. 僅含「/」字符的字符串表示應用程序的「默認」的servlet。在這種情況下,servlet路徑 是請求URI減去上下文路徑,路徑信息爲 null。
  4. 所有其他字符串僅用於精確匹配。

參考:Java Servlet Specification

你也可以看一下這Basics of Java Servlet

+3

只需要添加,如果OP使用支持Servlet 3.0的Web應用程序servlet,那麼就不需要在web.xml中配置servlet。在[我們的Servlets Wiki](http://stackoverflow.com/tags/servlets/info) –

+0

有一個很好的解釋提供更新URL模式規範: –

+0

爲'/ AddPhotoServlet例子 - 將Servlet可以通過類似'http:// AddPhotoServlet.company.com /'的鏈接訪問?或者它會被'http:// company.com/AddPhotoServlet'訪問嗎? – mmcrae

27

Servlet的映射有兩個子標籤的url-pattern和servlet名。 url-pattern的指定爲其在servlet的名字給這個servlet應該被稱爲URL的類型。要注意的是,容器將使用區分大小寫爲servlet的匹配字符串比較。

的第一個規範url-pattern a web.xml服務器上的servlet容器上的服務器上下文的文件。COM的模式匹配,在<url-pattern>/status/*</url-pattern>如下:

第二規格的 url-pattern位於路徑A上下文
http://server.com/server/status/synopsis    = Matches 
http://server.com/server/status/complete?date=today = Matches 
http://server.com/server/status      = Matches 
http://server.com/server/server1/status    = Does not match 

/在example.com在代理上的例子的模式匹配,在<url-pattern>*.map</url-pattern>如下:

http://server.com/server/US/Oregon/Portland.map = Matches 
http://server.com/server/US/server/Seattle.map  = Matches 
http://server.com/server/Paris.France.map   = Matches 
http://server.com/server/US/Oregon/Portland.MAP = Does not match, the extension is uppercase 
http://example.com/examples/interface/description/mail.mapi =Does not match, the extension is mapi rather than map` 

url-mapping的第三規範,如果沒有其他模式匹配,則包含模式<url-pattern>/</url-pattern>的映射將匹配請求。這是默認的映射。映射到此模式的servlet稱爲默認servlet。

默認映射通常指向應用程序的第一頁。顯式提供默認映射還可以確保應用程序返回的格式錯誤的URL請求由應用程序處理,而不是返回錯誤。

下面的servlet映射元素將server servlet實例映射到默認映射。

<servlet-mapping> 
    <servlet-name>server</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

對於包含該元素的上下文中,即沒有被另一個映射處理的任何請求被轉發到server的servlet。

,最重要的是我們應該知道的URL路徑映射

  1. 容器將嘗試找到請求到Servlet的路徑的路徑的精確匹配約規則。成功的匹配選擇servlet。
  2. 容器將遞歸地嘗試匹配最長的路徑前綴。這是通過一次將路徑樹降級到一個目錄來完成的,使用'/'字符作爲路徑分隔符。最長的匹配決定了所選的servlet。
  3. 如果URL路徑中的最後一個段包含擴展名(例如.jsp),那麼servlet容器將嘗試匹配處理擴展請求的servlet。擴展名被定義爲最後'。'字符後的最後一個段的一部分。
  4. 如果前三條規則都不導致servlet匹配,那麼容器將嘗試提供適合所請求資源的內容。如果爲應用程序定義了「默認」servlet,它將被使用。

參考URL Pattern

相關問題