2013-02-04 50 views
1

两个URL映射之间的区别:/ *和/?Java web应用程序 - 部署描述符 - URL模式映射

<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DefaultServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

我读的规格后不能理解的是:

模式/ *将迫使一切通过MyServlet
该模式/将使DefaultServlet作为应用程序中的默认servlet。

两者对我来说都差不多。请让我知道是否有任何特定的区别?

+1

看到[this](http://stackoverflow.com/questions/5276297/mapping-servlet-to-serve-my-requests),[this](http://www.coderanch.com/t/526534)/Servlets/java/servlet-URL-mapping),并可能[this](http://www.zomeon.com/3686420/servlet-filter-url-mapping)。另外,[java servlet规范](https://jira.sakaiproject.org/secure/attachment/16135/servlet-2_4-fr-spec.pdf)可能有用。 –

+1

@EliranMalka作为一个附注,你给出了Servlet规范2.4版的链接,而当前版本是3.0。这里是[Java™Servlet规范版本3.0]的链接(http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/) – informatik01

+0

谢谢,@ informatik01,这是方便起见 - 这是我发现的唯一版本在线快速参考爆炸,无需下载。 –

回答

0

感谢您的链接,通过他们我已编译这个答案。让我们看到了一个样本web.xml

案例1:

<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
`

在这种情况下,所有的请求/context//context/anything/context/sample.do将调用servlet2

案例2:

<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
`

在像/context/这种情况下请求,/context/anything调用servlet2/context/sample.do将调用servlet1