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

时间:2013-02-05 18:51:22

标签: tomcat servlets war

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

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

或者您可以将其用作 @WebServlet(值= “/创建”,名字= “create_subscription”)

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

答案 2 :(得分:0)

我怀疑servlet.create可能还有另一个条目 你能在战争中查看web.xml吗?

如果结果还可以,可能会将servlet.create中的包声明更改为com.test之类的其他内容并重新运行。

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

  

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

Servlet 2.4规范PDF请参见p。 85 +