JavaダイナミックWebプロジェクトをEclipseにインポートしましたIDE(Eclipseで実装されましたIDEおよび正常に動作しています)) 。
プロジェクトの実行中に「getDispatcherType()
is undefined for type HttpServletRequest
」エラーが表示されます。
すべてのファイルをIDEに構造に従ってコピーしました。作業は完了です。
ここで、プロジェクトをインポートしたときにこのエラーが発生する理由を知りたいだけです。誰かが同じ問題に直面しましたか?私が犯したかもしれない間違いを教えてください。
Tomcat 8.0.xでサポートされているものと競合するIntelliJで使用していたサーブレットAPIバージョンが競合していたときに同じ問題が発生しました... Mavenを使用していたので、これに依存関係を変更し、私のwebappのクリーンデプロイと問題はなくなりました。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
Tomcat 8.0.18、maven。それはlibの競合についてです。私の解決策は次のとおりです。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
変更後:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
"servlet-api-2.5.jar"をpom.xmlにある他の依存関係から除外する必要があります。
Tomcatが既に提供しているため、別のservlet-apiをコンパイルとして追加しないようにしてください。
私の手順:
MavenによってWEB-INF/libフォルダーにservlet-api-2.5.jarが含まれていることを確認したため、「Mavenプロジェクト@IntelliJ Idea」の完全な依存関係グラフを確認し、この依存関係を除外しましたそれが来るすべての場所から。 [このボタンには[依存関係を表示]ボタンが便利です]
Velocity-toolsから「commons-logging」(servlet-api 2.5依存関係があるため)を除外する必要がありました。また、デフォルトのスコープに直接依存するjaxws-springからservlet-apiを除外する必要がありました。
次に、提供されたスコープをjavax.servlet-api依存関係に追加するだけです。
Servlet-api 3.0.1+を「コンパイル」として追加すると、両方の結果になる可能性があり、最初にロードしたものが勝ちます。これはまったく良くありません。
注:この問題は、servlet-apiのgroupId/artifactIdの名前変更に起因するものであり、mavenプロジェクトに含まれる最も古いバージョンでオーバーライドされていないことです。 :\
Tomcat自体からservlet-api.jarおよびjsp-api.jarを使用してこの問題を解決したため、依存関係は以下のようなシステムスコープで指定されます。
<servlet.api.jar.path>/opt/Apache-Tomcat-8.0.15/lib/servlet-api.jar</servlet.api.jar.path>
<jsp.api.jar.path>/opt/Apache-Tomcat-8.0.15/lib/jsp-api.jar</jsp.api.jar.path>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<scope>system</scope>
<systemPath>${servlet.api.jar.path}</systemPath>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>system</scope>
<systemPath>${jsp.api.jar.path}</systemPath>
</dependency>
Tomcatがバージョン8の場合:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
働いた!
これは、古いTomcatバージョンから新しいTomcatバージョンにアップグレードし、j2ee.jarやjavaee.jarなどの古いjarファイルを保持している場合にも発生する可能性があります。
j2ee.jarを神経質にする必要がありますwebapp、インターフェイスはTomcatによって実装されます