2014-10-28 42 views
2

當我與路徑映射servlet作爲像:Servlet的路徑「/」返回任何請求圖案的servlet內容

<servlet> 
    <servlet-name>Home1Servlet</servlet-name> 
    <servlet-class>com.project.servlets.Home1Servlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Home1Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

,然後當我通過像任何路徑請求來自瀏覽器的servlet:

http://localhost:8084/project/ 
http://localhost:8084/project/asd 
http://localhost:8084/project/why 
http://localhost:8084/project/hell 

所有這些請求都返回相同的Home1Servlet內容。爲什麼?

如何才能將servlet映射到路徑「/」?

我使用Apache Tomcat 6.0.26,Java EE的5上下文路徑是:/項目

+1

問題的「爲什麼」部分回答了[這裏](http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern) – fracz 2014-10-28 07:50:01

+2

您需要詳細說明更多關於你擁有的其他servlet。期望不清楚。 – 2014-10-28 07:51:49

+1

檢查http://stackoverflow.com/questions/1030302/how-can-i-map-a-root-servlet-so-that-other-scripts-are-still-runnable/9503668#9503668 – Daniel 2014-10-28 07:59:22

回答

2

如果你想的servlet映射才根URL,然後用空的映射:

<url-pattern></url-pattern> 

這是在Servlet規範12.2描述:

空字符串(「」)是該應用程序的上下文根準確映射到 一個特殊的URL的模式,即,形式的請求主機:端口/ < context_root> /。在這種情況下,路徑信息是/和 servlet路徑和上下文路徑是空字符串(「」)。

+0

謝謝,這回答我的問題。感謝您的幫助。 – UDPLover 2014-10-28 08:03:46

-1

您的servlet網址映射爲空。

<url-mapping>/</url-mapping> 

所以這個網址

http://localhost:8084/project/<any_url_given> 

不指向任何特定的servlet類,而它會告訴你任何URL模式它接受e.g HTTP :: /。

如果你的servlet映射像

<servlet> 
    <servlet-name>hell</servlet-name> 
    <servlet-class>com.project.servlets.Hell</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>hell</servlet-name> 
    <url-pattern>/hell</url-pattern> 
</servlet-mapping> 

,如果您輸入的網址

http://localhost:8084/project/hell 

然後com.project.servlets.Hell的servlet應該被調用。