2014-10-28 75 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应该被调用。