Servlet路径“/”返回任何请求模式的servlet内容

时间:2014-10-28 07:44:41

标签: jsp servlets document-root url-pattern

当我使用path映射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.上下文路径是:/ project

2 个答案:

答案 0 :(得分:2)

如果要将servlet仅映射到根URL,请使用空映射:

<url-pattern></url-pattern>

它在Servlet规范12.2中描述:

  

空字符串(&#34;&#34;)是一个精确映射到的特殊URL模式   应用程序的上下文根,即表单的请求   主机:端口/&LT; context_root&GT; /。在这种情况下,路径信息是/和   servlet路径和上下文路径是空字符串(&#34;&#34;)。

答案 1 :(得分:-1)

您的servlet网址映射为空。

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

所以这个网址

<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>

并不指向任何特定的servlet类,而是告诉你它接受的任何url模式,例如http :: /。

如果您的servlet映射类似于

http://localhost:8084/project/hell

如果您输入网址

com.project.servlets.Hell

然后应该调用 line-height servlet。