覆盖web.xml中URL模式“/”的“默认servlet”行为

时间:2015-08-03 15:02:01

标签: java jsp tomcat servlets

我有一个特定的JSP,我想在我的网站的根页面(URL“/”)提供服务。所有其他请求应以静态方式提供。所以很自然地我配置了我的web.xml

<servlet>
  <servlet-name>index</servlet-name>
  <jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>index</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

不幸的是,似乎<url-pattern>/</url-pattern>没有做我需要做的事情。而不只是处理“/”网址it is special-cased, and functions as the "default mapping",处理未被其他网址格式捕获的所有请求

在这种特殊情况下,default servlet的<url-pattern>/*</url-pattern>处理所有 URL。对“/”的请求以404形式出现,无论发出什么请求,index servlet都不会被调用。

有没有办法将“/”URL和只有该URL显式映射到特定的servlet?

1 个答案:

答案 0 :(得分:3)

使用空模式字符串匹配上下文根:

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