【问题标题】:The servlets named [/HelloServlet] and [com.sample.HelloServlet] are both mapped to the url-pattern [/HelloServlet] which is not permitted [duplicate]名为 [/HelloServlet] 和 [com.sample.HelloServlet] 的 servlet 都映射到不允许的 url 模式 [/HelloServlet] [重复]
【发布时间】:2014-01-31 00:58:24
【问题描述】:

我做了一个有错误的特定项目:

出现问题:Server Tomcat v7.0 Server at localhost 无法启动。

当我尝试启动 tomcat 来运行它时。 这是我的代码。这取自核心 servlet 手册。

package com.sample;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 
String docType = 
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + 
"Transitional//EN\">\n"; 
out.println(docType + 
"<HTML>\n" + 
"<HEAD><TITLE>Hello</TITLE></HEAD>\n" + 
"<BODY BGCOLOR=\"#FDF5E6\">\n" + 
"<H1>Hello</H1>\n" + 
"</BODY></HTML>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

这是堆栈跟踪:

Jan 12, 2014 1:36:39 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Java\jdk1.7.0_45\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Java/jdk1.7.0_45/bin/../jre/bin/client;C:/Java/jdk1.7.0_45/bin/../jre/bin;C:/Java/jdk1.7.0_45/bin/../jre/lib/i386;;.;C:\Java\jdk1.7.0_45\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32\wbem;C:\Windows\system32\windowspowershell\v1.0\;c:\program files\broadcom\broadcom 802.11 network adapter\driver;c:\program files\microsoft sql server\100\tools\binn\;c:\program files\microsoft sql server\100\dts\binn\;c:\program files\microsoft sql server\100\tools\binn\vsshell\common7\ide\;c:\program files\microsoft visual studio 9.0\common7\ide\privateassemblies\;c:\program files\ibm\gsk8\lib;C:\PROGRA~1\IBM\SQLLIB\BIN;C:\PROGRA~1\IBM\SQLLIB\FUNCTION;C:\PROGRA~1\IBM\SQLLIB\SAMPLES\REPL;C:\MinGW\bin;;C:\jee_web_development\eclipse-jee-kepler-SR1-win32\eclipse;;.
Jan 12, 2014 1:36:39 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:test-app' did not find a matching property.
Jan 12, 2014 1:36:39 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:HelloServlet' did not find a matching property.
Jan 12, 2014 1:36:39 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jan 12, 2014 1:36:39 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jan 12, 2014 1:36:39 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 465 ms
Jan 12, 2014 1:36:39 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jan 12, 2014 1:36:39 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
Jan 12, 2014 1:36:40 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/HelloServlet]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/HelloServlet]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 6 more
Caused by: java.lang.IllegalArgumentException: The servlets named [/HelloServlet] and [com.sample.HelloServlet] are both mapped to the url-pattern [/HelloServlet] which is not permitted
at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:335)
at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2466)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2148)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2109)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2102)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2102)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1293)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more

Jan 12, 2014 1:36:40 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more

Jan 12, 2014 1:36:40 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more

Jan 12, 2014 1:36:40 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Jan 12, 2014 1:36:40 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Jan 12, 2014 1:36:40 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Jan 12, 2014 1:36:40 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
Jan 12, 2014 1:36:40 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

我是 sevlet 的新手,不知道大多数错误是什么意思。我究竟做错了什么?我在 SO 上搜索过类似的其他问题,但我找到的答案没有用。

这是我的 web.xml 文件:

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.sample.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>/HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>

我实际上不知道这是什么以及这是为了什么。但是我导入的大多数项目都有这个所以我只做一个。不过不确定这是否正确。

【问题讨论】:

  • 请提供堆栈跟踪
  • 请在日志中提供完整的错误信息。
  • 使用堆栈跟踪更新的问题。
  • 您能发布您的 web.xml 内容吗?正如日志所说,您与使用相同 url-patter 的两个 servlet 发生冲突 原因:java.lang.IllegalArgumentException:名为 [/HelloServlet] 和 [com.sample.HelloServlet] 的 servlet 都映射到 url-pattern [ /HelloServlet] 这是不允许的
  • 我猜你已经在 web.xml 中映射了你的 servlet。请删除 web.xml servlet 映射。它们将从您提供的注释中挑选

标签: java eclipse tomcat servlets


【解决方案1】:

这可能是因为您将 web.xml servlet 配置与基于注释的配置混合在一起,因此请检查您没有在 web.xml 中声明相同的 servlet。

在您的 xml 中,您有两个选项,因为您正在使用注释配置您的 servlet,您可以从 web.xml 中删除 de 标记。 或者,如果你想修复你的 web.xml,你需要从 servlet-name 标记中删除 start /,它需要与之前的 servlet 名称匹配,所以:

<servlet-mapping> 
   <servlet-name>HelloServlet</servlet-name> 
   <url-pattern>/HelloServlet</url-pattern> 
</servlet-mapping>

【讨论】:

  • 这是我的 web.xml 文件:HelloServletcom.sample.HelloServlet/HelloServlet/HelloServlet 我实际上这是什么以及它的用途。所以我只做一个。不过不确定这是否正确。
  • 这是我的 web.xml 文件:HelloServletcom.sample.HelloServlet/HelloServlet/HelloServlet 我其实不知道这是什么,这是什么为了。但是我导入的大多数项目都有这个所以我只做一个。不过不确定这是否正确。
【解决方案2】:

您必须导入“javax.servlet.annotation.WebServlet”才能使用@WebServlet("/HelloServlet"),您可以使用便携式tomcat并检查server.xml文件中tomcat的端口号,以便tomcat端口不与您现有的端口冲突。

【讨论】:

    【解决方案3】:

    错误:Tomcat 服务器启动失败

    分辨率:

    1. 清理工作区(多次工作
    2. 运行的Tomcat直接指向web.xml文件。 需要检查 web.xml 文件中写入的内容....†这也是服务器问题
    3. 有时由于与 jar 文件绑定不当而发生。 为此,首先将手动 jar 文件添加到 WEB-INF ,lib 文件夹中,然后 右键单击项目和属性,然后将 jar 添加到构建路径选项中。

    正确清理,构建工作区,然后再次尝试启动服务器。 它会工作:)

    【讨论】:

      【解决方案4】:

      Server Tomcat v7.0 Server at localhost 启动失败。

      在我的 Eclipse (Juno) 中,我修复了以下方法。

      1.清理项目和服务器

      2.从以下目录中删除.snap文件

      {工作空间目录}\.metadata\.plugins\org.eclipse.core.resources

      3.从以下目录中删除temp文件

      {工作区目录}\.metadata\.plugins\org.eclipse.wst.server.core

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 2016-03-07
        • 1970-01-01
        • 2013-01-20
        • 2015-04-26
        • 2014-10-01
        • 1970-01-01
        • 2014-01-22
        • 2013-09-19
        相关资源
        最近更新 更多