2014-10-18 40 views
35

我已經將Java動態Web項目導入到Eclipse IDE(它已在Eclipse IDE中實現並正常工作)。getDispatcherType()未定義爲類型HttpServletRequest

運行該項目時,出現「getDispatcherType()未定義類型HttpServletRequest」錯誤。

我已根據結構將每個文件複製到IDE中,並完成了工作。

現在我只想知道當我導入項目時爲什麼會出現此錯誤。有沒有人遇到同樣的問題?請讓我知道我可能犯了什麼錯誤。

+1

在apache tomcat 7.0.X服務器版本中部署的項目。 我試圖在我的環境中導入。我使用的是Apache Tomcat 8.0.14,我得到了上面提到的錯誤。 所以我已經改變了我的服務器到7版本。我的項目現在完美工作。 它聽起來不符合邏輯。 是apache tomcat是不是反向兼容!? 專家請澄清我。 – 2014-10-19 16:19:26

+2

你解決了嗎?同樣的問題在這裏.. – ianaz 2014-10-29 18:36:07

+0

不,我從這個問題上移動。我使用的是tomcat版本7.X. – 2014-11-08 03:59:05

回答

42

當我在IntelliJ中使用的衝突Servlet-api版本與Tomcat 8.0.x中支持的版本衝突時,我遇到了同樣的問題......我使用的是Maven,所以我只是將其依賴關係更改爲此,然後乾淨的部署我的web應用程序,問題就消失了。

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

嗨,我有同樣的問題。只是爲了澄清,你是否在maven依賴項中添加'provided'? – 2014-12-14 12:53:00

+0

爲我工作:-) – user1007522 2015-01-12 15:47:37

+2

這是一個錯誤的解決方案/修復,因爲您添加了兩次相同的依賴關係,一個由tomcat 8提供,另一個在lib文件夾中。錯誤來自添加來自第三方依賴關係的servlet-api 2.5。除非你不在爲你提供servlet-api的容器中。 – 2015-06-24 14:22:28

14

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> 
0

從舊升級到較新版本的Tomcat,並保留舊的jar文件如的j2ee.jar和javaee.jar時也會發生這種情況。

的j2ee.jar應nerver被包括在你的web應用中,interfae由tomcat的

0

我用從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> 
+0

我刪除了jsp-api和jstl依賴項(都是2.1和1.2版本),它對我很有幫助。 – 2015-06-20 12:37:24

5

你應該從你可能在你的pom.xml任何其他依賴排除「的servlet-API-2.5.jar」

儘量不要在編譯時添加不同的servlet-api,因爲您的tomcat已經爲您提供了它。


我的步驟:

我已籤,有一個servlet的API-2.5.jar包括在Maven的我的WEB-INF/lib文件夾中,這樣的話,我檢查了全依賴圖關於「Maven項目@IntelliJ Idea」,然後我從所有來自它的地方排除了這種依賴關係。 [按鈕「顯示依賴關係」對此適用)

我必須從velocity-tools中排除「commons-logging」(因爲它具有servlet-api 2.5依賴性)。 也必須從jaxws-spring中排除servlet-api,它與默認範圍直接相關。

然後,只需將您提供的作用域添加到javax.servlet-api依賴項中即可。

如果你將你的servlet-api 3.0.1+添加爲「compile」,那麼你最終可能會同時擁有兩個,並且第一個加載將會贏,這根本就不好。

注: 我的猜測是,這個問題是來自servlet的API的的groupId/artifactId的的重命名,不與舊版本進行覆蓋包括在Maven項目。 :\

+0

你應該接受這個。工作對我來說只是通過註釋掉: 的javax.servlet servlet的API 2.5 sinisterrook 2015-07-02 12:52:42

1

如果你的tomcat的版本是8用途:

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

工作!

+0

這個工作對我來說,Tomcat的8兼容的解決方案! – 2016-10-06 01:38:03