我在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>
答案 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 +