3

我在 JDK 7 中使用 Tomcat 7 和 Eclipse 来创建这个简单的 servlet 应用程序。但是当我将war文件复制到tomcat时,我无法启动它并得到这个错误:

名为 [create_subscription] 和 [servlet.create] 的 servlet 都映射到不允许的 url-pattern [/create]

web.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>CC</display-name>
  <welcome-file-list>
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<servlet>
  <servlet-name>create_subscription</servlet-name>
  <servlet-class>servlet.create</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>create_subscription</servlet-name>
  <url-pattern>/create</url-pattern>
</servlet-mapping>

</web-app>
4

3 回答 3

9

如果您在 web.xml 和注释中声明了相同的映射,那么在更高版本的 Tomcat 中您将得到这个精确的错误。

于 2013-03-15T01:42:03.893 回答
1

检查您的 servlet 类。它会有@WebServlet("/xyz")。评论这一行,然后它应该可以正常工作。

或者您可以将其用作 @WebServlet(value="/create",name="create_subscription")

实际上,当您使用 @WebServlet("/xyz") 时,它会将 servlet 名称视为完全限定的 servlet 名称。所以tomcat认为你有一个URL有两个servlet映射,这就是它给你错误的原因。

于 2015-02-23T09:26:52.373 回答
0

我怀疑 servlet.create 可能还有另一个条目 你能查看 web.xml 里面的 war 吗?

如果结果没问题,可能会将包声明从 servlet.create 更改为其他内容,例如 com.test 并重新运行。

至于为什么 2 个 servlet 不能映射到完全相同的 Url 模式

servlet 规范没有明确说明,但有些服务器不允许这样做。此外,有两个具有完全相同的 URL 没有意义,因为 servlet 匹配的 url 在第一次匹配时停止。

Servlet 2.4规范 PDF 参见 p. 85+

于 2013-02-07T11:34:44.800 回答