web-dev-qa-db-ja.com

java.lang.IllegalArgumentException:[X]および[Y]という名前のサーブレットは両方とも、許可されていないurl-pattern [/ url]にマップされています

このサーブレットを追加しようとしました

package com.classmgt.servlet;

@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}

以下のようにweb.xmlを編集して、私のEclipseプロジェクトに

<servlet>
    <description>Servlet to print out Hello World!</description>
    <display-name>ControllerServlet</display-name>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>com.classmgt.servlet.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/ControllerServlet</url-pattern>
</servlet-mapping>

ただし、次の例外が発生しました。

SEVERE: A child container failed during start
Java.util.concurrent.ExecutionException: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ClassManagementSystem]]
    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.runWorker(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[/ClassManagementSystem]]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
    ... 7 more
Caused by: Java.lang.IllegalArgumentException: The servlets named [ControllerServlet] and [com.classmgt.servlet.ControllerServlet] are both mapped to the url-pattern [/ControllerServlet] which is not permitted
    at org.Apache.catalina.deploy.WebXml.addServletMapping(WebXml.Java:335)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.Java:2457)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.Java:2139)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.Java:2100)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.Java:2093)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.Java:2093)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.Java:2093)
    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:369)
    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:5269)
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
    ... 7 more

metadata-complete="true"web.xmlに追加しようとしましたが、サーブレットが認識されなくなりました。

16
John

原因:Java.lang.IllegalArgumentException:[ControllerServlet]という名前のサーブレットと[com.classmgt.servlet.ControllerServlet]の両方が、許可されていないurl-pattern [/ ControllerServlet]にマッピングされています

@WebServletアノテーションベースとweb.xmlベースの構成が混在しているようです。

「サーブレットの作成」ウィザードを使用してサーブレットを作成し、url-patternでweb.xmlエントリを作成してから、web.xmlに入力するすべてのものを複製する@WebServletアノテーションを追加したのではないかと思います。

両方ではなく、どちらか一方を使用する必要があります。 web.xmlからマッピングを削除し、@WebServletアノテーションのみを使用して先に進んでください。

詳細: サーブレット3.0アノテーション および 私たちのサーブレットwikiページ

33
Hardik Mishra

_web.xml_に既に追加されているため、ControllerServletから注釈@WebServlet("/ControllerServlet")を削除するだけです。

Java.lang.IllegalArgumentException: The servlets named...

別のパッケージ(name = 'syncro')に新しいサーブレットを作成するこの原因を取得しました。 syncro.SynchronizeServletにある私のサーブレットは、このサーブレットに関する情報をデプロイメント記述子(web.xml)に追加すると、エラー:IllegalArgumentException

不適切な記述子部分の例:

<servlet>
    <description></description>
    <display-name>SynchronizeServlet</display-name>
    <servlet-name>SynchronizeServlet</servlet-name>
    <servlet-class>SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

サーブレットの正しいパスを追加すると、エラーが消えました。以下の説明を修正してください:

<servlet>
    <description></description>
    <display-name>syncro.SynchronizeServlet</display-name>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <servlet-class>syncro.SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

==> 73!

2

私にとってうまくいったのは、「クリーン」なことです。

私の問題は、サーブレットクラスの名前が変更されたときに発生しました。ただし、元の.classファイルは(サーブレットアノテーションとともに)ターゲットディレクトリに残りました。 ControllerServletをパッケージに移動したようです。

Jettyはこれらの明らかな重複を気にしていなかったようですが、Tomcat7は「両方をurl-patternにマップされました」という例外を与えました。

これが問題の原因であるかどうかを確認する簡単な方法は、WARを調べて、古いクラス([ControllerServlet]と[com.classmgt.servlet.ControllerServlet]の両方)の両方がそこにあるかどうかを確認することです。

2
KeithJ

[Register]および[com.TeamWork.controller.Register]という名前のサーブレットは、どちらも許可されていないurl-pattern [/ Register]にマップされています

このエラーが発生した場合は、web.xmlからサーブレットマッピングを削除し、@ WebServlet( "/ Register")アノテーション+ urlを追加するだけです。

<servlet>
     <servlet-name>Register</servlet-name>
     <servlet-class>com.TeamWork.controller</servlet-class>
  </servlet>

次に、一番上のサーブレットクラスにこれを追加します

@WebServlet("/Register")`
public class Register extends HttpServlet { }

感謝します

0
Mani Manu

私については、pomファイルにtom-catバージョンを追加し、それが機能しました

<properties>
    <Tomcat.version>7.0.52</Tomcat.version>
</properties>
<dependencies>
0
user1311061