このサーブレットを追加しようとしました
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
に追加しようとしましたが、サーブレットが認識されなくなりました。
原因: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ページ 。
_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!
私にとってうまくいったのは、「クリーン」なことです。
私の問題は、サーブレットクラスの名前が変更されたときに発生しました。ただし、元の.classファイルは(サーブレットアノテーションとともに)ターゲットディレクトリに残りました。 ControllerServletをパッケージに移動したようです。
Jettyはこれらの明らかな重複を気にしていなかったようですが、Tomcat7は「両方をurl-patternにマップされました」という例外を与えました。
これが問題の原因であるかどうかを確認する簡単な方法は、WARを調べて、古いクラス([ControllerServlet]と[com.classmgt.servlet.ControllerServlet]の両方)の両方がそこにあるかどうかを確認することです。
[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 { }
感謝します
私については、pomファイルにtom-catバージョンを追加し、それが機能しました
<properties>
<Tomcat.version>7.0.52</Tomcat.version>
</properties>
<dependencies>