IllegalArgumentException: เซิร์ฟเล็ตชื่อ [HelloWorlds] และ [Hello] ได้รับการแมปกับรูปแบบ URL [/sHelloWorld] ซึ่งไม่ได้รับอนุญาต [ซ้ำกัน]

ฉันได้รับข้อผิดพลาดด้านล่างเมื่อฉันเริ่ม Tomcat จาก eclipse

Sep 14, 2013 4:18:03 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:\Program Files\Java\jre1.6.0\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.6.0/bin/client;C:/Program Files/Java/jre1.6.0/bin;C:/Program Files/Java/jre1.6.0/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\eclipse;
    Sep 14, 2013 4:18:03 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TestProject' did not find a matching property.
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-bio-8080"]
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
    Sep 14, 2013 4:18:03 PM org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 420 ms
    Sep 14, 2013 4:18:03 PM org.apache.catalina.core.StandardService startInternal
    INFO: Starting service Catalina
    Sep 14, 2013 4:18:03 PM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
    Sep 14, 2013 4:18:03 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[/TestProject]]
        at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
        at java.util.concurrent.FutureTask.get(Unknown Source)
        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$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestProject]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        ... 7 more
    Caused by: java.lang.IllegalArgumentException: The servlets named [HelloWorlds] and [Hello] are both mapped to the url-pattern [/sHelloWorld] which is not permitted
        at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:335)
        at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2450)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2132)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:2055)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1962)
        at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1300)
        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)
        ... 7 more
    Sep 14, 2013 4:18:03 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$Sync.innerGet(Unknown Source)
        at java.util.concurrent.FutureTask.get(Unknown Source)
        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(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        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$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    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)
        ... 7 more
    Sep 14, 2013 4:18:03 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(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        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
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["http-bio-8080"]
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
    Sep 14, 2013 4:18:03 PM org.apache.catalina.core.StandardService stopInternal
    INFO: Stopping service Catalina
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["http-bio-8080"]s
    Sep 14, 2013 4:18:03 PM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

person Himanshu Khurana    schedule 14.09.2013    source แหล่งที่มา
comment
คุณเห็นข้อผิดพลาดนี้ The servlets named [HelloWorlds] and [Hello] are both mapped to the url-pattern [/sHelloWorld] which is not permitted หรือไม่   -  person A4L    schedule 14.09.2013
comment
‹?xml version=1.0 encoding=UTF-8?› ‹web-app› ‹servlet› ‹servlet-name›HelloWorlds‹/servlet-name› ‹servlet-class›Hello‹/servlet-class› ‹/servlet› ‹ การทำแผนที่เซิร์ฟเล็ต› ‹ ชื่อเซิร์ฟเล็ต› HelloWorlds ‹ / servlet-name› ‹ url- รูปแบบ› / sHelloWorld ‹ / url- รูปแบบ› ‹ / servlet-mapping› ‹ / web-app›   -  person Himanshu Khurana    schedule 14.09.2013
comment
การแมป URL ไม่ควรส่งผลต่อการเริ่มต้น Tomcat   -  person Juned Ahsan    schedule 14.09.2013
comment
ตรวจสอบสิ่งนี้: tomcat.apache.org/native-doc   -  person Juned Ahsan    schedule 14.09.2013
comment
เมื่อฉันเริ่มต้นเซิร์ฟเวอร์จากพรอมต์คำสั่งมันจะให้สิ่งต่อไปนี้: การใช้ CATALINA_BASE: C:\apache-tomcat การใช้ CATALINA_HOME: C:\apache-tomcat การใช้ CATALINA_TMPDIR: C:\apache-tomcat\temp การใช้ JRE_HOME: C:\Program Files\ Java\jdk1.6.0\ การใช้ CLASSPATH: C:\apache-tomcat\bin\bootstrap.jar;C:\apache-tomcat\bin\ tomcat-juli.jar C:\apache-tomcat\bin›   -  person Himanshu Khurana    schedule 14.09.2013


คำตอบ (2)


นี่คือ feature ใหม่ของเวอร์ชัน 7.0.42 ของ apache tomcat servlet conainer

ฉันเพิ่งทำการทดสอบกับ web.xml ต่อไปนี้

  <servlet>
    <description></description>
    <display-name>Servlet_01</display-name>
    <servlet-name>Servlet_01</servlet-name>
    <servlet-class>so.servlets.Servlet_01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Servlet_01</servlet-name>
    <url-pattern>/Servlet_01</url-pattern>
  </servlet-mapping>

  <servlet>
    <description></description>
    <display-name>Servlet_02</display-name>
    <servlet-name>Servlet_02</servlet-name>
    <servlet-class>so.servlets.Servlet_02</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Servlet_02</servlet-name>
    <url-pattern>/Servlet_01</url-pattern>
  </servlet-mapping>

และมีข้อผิดพลาดเหมือนกับคุณทุกประการ

The servlets named [Servlet_01] and [Servlet_02] are both mapped to the url-pattern [/Servlet_01] which is not permitted

การทดสอบเดียวกันกับเวอร์ชันก่อนหน้า - คือ 7.0.32 - ไม่ได้ทำให้เกิดข้อผิดพลาดใดๆ ในการเริ่มต้นบริบท

เห็นได้ชัดว่าคุณมีเซิร์ฟเล็ตสองตัว HelloWorlds และ Hello ทั้งคู่แมปกับ URL เดียวกัน /sHelloWorld web.xml ที่คุณใส่ไว้ในความคิดเห็นของคุณมีแนวโน้มว่าจะไม่ถูกต้อง

ผลกระทบในเวอร์ชัน 7.0.32 คือคำขอทั้งหมดที่มุ่งหมายไปที่ Servlet_01 จะไปที่ Servlet_02 จริงๆ ดังนั้นฉันจะบอกว่ามันเป็นสิ่งที่ดีที่ตอนนี้ Tomcat ส่งข้อผิดพลาดเมื่อพบการแมปที่ผิดพลาดในบริบท

ข้อผิดพลาดเกิดขึ้นแม้ว่าคุณจะมีเซิร์ฟเล็ตเดียวกันซึ่งมีสองชื่อที่แตกต่างกันซึ่งแมปกับรูปแบบ URL เดียวกัน

ในการแก้ปัญหาของคุณ ขั้นแรกให้ค้นหา web.xml ที่ถูกต้อง และแก้ไขเพื่อให้แต่ละเซิร์ฟเล็ตมีการแมป URL ที่แตกต่างกัน

person A4L    schedule 14.09.2013
comment
ขอบคุณมันช่วยได้เต็มที่มาก แต่สิ่งหนึ่งที่ฉันต้องการยืนยันชื่อเซิร์ฟเล็ตและชื่อคลาสควรเหมือนกัน bcoz เมื่อฉันใช้ชื่อเดียวกันสำหรับชื่อเซิร์ฟเล็ตและชื่อคลาส มันใช้งานได้ และเมื่อฉันให้ชื่อเซิร์ฟเล็ตต่างกัน มันก็ทำให้เกิดข้อผิดพลาดเดียวกัน - person Himanshu Khurana; 14.09.2013
comment
@HimanshuKhurana ไม่เป็นไร! แต่โปรดทราบว่า servlet-name ไม่จำเป็นต้องเหมือนกับ servlet-class โดยชื่อแรกเป็นเพียงชื่อตรรกะที่ช่วยอ้างอิงเซิร์ฟเล็ตในวิธีที่ง่ายกว่า เช่น เมื่อกำหนดค่าการแมป URL ชื่อที่สองจะต้องเป็นชื่อแบบเต็มของคลาสเซิร์ฟเล็ต - เช่น <package-name>.<class-name> - และคุณไม่มีพื้นที่ว่างในการเลือก ในตัวอย่างของฉัน web.xml so.servlets.Servlet_01 คือชื่อแบบเต็มของคลาสเซิร์ฟเล็ต Servlet_01 ที่มีอยู่ในแพ็คเกจ so.servlets. - person A4L; 14.09.2013

สาเหตุอาจเกิดจากการผสมคำอธิบายประกอบและการกำหนดค่าที่ประกาศ ดูที่ java.lang IllegalArgumentException: เซิร์ฟเล็ตชื่อ [X] และ [Y] ได้รับการแมปกับรูปแบบ URL [/url] ซึ่งไม่ได้รับอนุญาต

person Lefteris Laskaridis    schedule 14.09.2013