【问题标题】:The servlets named [create_subscription] and [servlet.create] are both mapped to the url-pattern [/create] which is not permitted [duplicate]名为 [create_subscription] 和 [servlet.create] 的 servlet 都映射到不允许的 url 模式 [/create] [重复]
【发布时间】:2013-01-20 19:16:48
【问题描述】:

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

【问题讨论】:

    标签: tomcat servlets war


    【解决方案1】:

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

    【讨论】:

    • 注释似乎确实是原因。如果您使用 STS 进行开发,它会将 url 模式作为注释放在类上方。刚刚从 web.xml 中删除了 部分,现在可以正常工作了。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我怀疑 servlet.create 可能还有另一个条目 能不能查看一下war里面的web.xml。

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

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

      servlet 规范没有明确说明,但有些服务器没有 允许。此外,拥有两个具有完全相同的 URL 不会使 感觉是因为 servlet 匹配的 url 在第一个停止 匹配。

      Servlet 2.4 规范 PDF 请参见第 1 页。 85+

      【讨论】:

      • 谢谢 Sudhakar,我查看了我的 war 文件中的 web.xml,它就在那里,而且只有一个 servlet.crate。我在 Eclipse 中创建了另一个项目并再次编写相同的程序,它现在可以工作了。我不知道这很奇怪,一切都和以前的项目一样(我检查了很多次)。但是这个工作前一个没有!
      猜你喜欢
      • 2016-11-26
      • 2016-03-07
      • 1970-01-01
      • 2015-04-26
      • 2014-10-01
      • 2014-01-31
      • 1970-01-01
      • 2014-01-22
      • 2013-09-19
      相关资源
      最近更新 更多