web-dev-qa-db-ja.com

getDispatcherType()はタイプHttpServletRequestに対して未定義です

JavaダイナミックWebプロジェクトをEclipseにインポートしましたIDE(Eclipseで実装されましたIDEおよび正常に動作しています)) 。

プロジェクトの実行中に「getDispatcherType() is undefined for type HttpServletRequest」エラーが表示されます。

すべてのファイルをIDEに構造に従ってコピーしました。作業は完了です。

ここで、プロジェクトをインポートしたときにこのエラーが発生する理由を知りたいだけです。誰かが同じ問題に直面しましたか?私が犯したかもしれない間違いを教えてください。

36

Tomcat 8.0.xでサポートされているものと競合するIntelliJで使用していたサーブレットAPIバージョンが競合していたときに同じ問題が発生しました... Mavenを使用していたので、これに依存関係を変更し、私のwebappのクリーンデプロイと問題はなくなりました。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>
42
James Boutcher

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>
14
zond

"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プロジェクトに含まれる最も古いバージョンでオーバーライドされていないことです。 :\

6
Juan Carrey

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>
1
Tony Vu

Tomcatがバージョン8の場合:

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
</dependency>

働いた!

1
Gerbert Santos

これは、古いTomcatバージョンから新しいTomcatバージョンにアップグレードし、j2ee.jarやjavaee.jarなどの古いjarファイルを保持している場合にも発生する可能性があります。

j2ee.jarを神経質にする必要がありますwebapp、インターフェイスはTomcatによって実装されます

0
Jef