对于HttpServletRequest类型,未定义getDispatcherType()

时间:2014-10-18 05:01:58

标签: java eclipse servlets

我已将Java动态Web项目导入Eclipse IDE(在Eclipse IDE中实现并正常工作)。

我在运行项目时收到“getDispatcherType()未定义类型HttpServletRequest”错误。

我已根据结构将每个文件复制到IDE中,并完成了工作。

现在我只想知道为什么在导入项目时出现此错误。有人遇到过同样的问题吗?请让我知道我可能犯了什么错误。

6 个答案:

答案 0 :(得分:42)

当我在IntelliJ中使用的与我在Tomcat 8.0.x中支持的内容冲突的servlet-api版本冲突时,我遇到了同样的问题......我正在使用Maven,所以我只是改变了对它的依赖,然后干净地部署了我的webapp,问题就消失了。

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

答案 1 :(得分: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>

答案 2 :(得分:6)

您应该从pom.xml中可能包含的任何其他依赖项中排除“servlet-api-2.5.jar”

尽量不要将不同的servlet-api添加为编译,因为你的tomcat已经为你提供了它。


我的步骤:

我已经检查过Maven中我的WEB-INF / lib文件夹中包含了一个servlet-api-2.5.jar,然后,我检查了“Maven projects @IntelliJ Idea”的完整依赖图,然后我从所有来自它的地方排除这种依赖。 [按钮“显示依赖关系”对此更方便]

我不得不从速度工具中排除“commons-logging”(因为它有servlet-api 2.5依赖)。 还必须从jaxws-spring中排除servlet-api,它直接依赖于默认范围。

然后,只需在javax.servlet-api依赖项中添加提供的作用域。

如果你将servlet-api 3.0.1+添加为“compile”,你可能最终得到两者,并且第一个加载将获胜,这一点都不好。

注意: 我的猜测是这个问题来自于重命名servlet-api的groupId / artifactId,而不是用maven项目中包含的最旧版本覆盖。 :\

答案 3 :(得分:1)

我通过使用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>

答案 4 :(得分:1)

如果您的tomcat是版本8,请使用:

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

工作!

答案 5 :(得分:0)

从旧的Tomcat版本升级到新的Tomcat版本并保留旧的jar文件(如j2ee.jar和javaee.jar)时,也会发生这种情况。

j2ee.jar应该包含在你的webapp中,interfae是由tomcat实现的