【问题标题】:getDispatcherType() is undefined for the type HttpServletRequest [duplicate]HttpServletRequest 类型未定义 getDispatcherType() [重复]
【发布时间】:2014-12-13 17:06:09
【问题描述】:

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

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

我已经按照结构将每个文件复制到IDE中,工作就完成了。

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

【问题讨论】:

  • 之前部署在apache tomcat 7.0.X server版本的项目。我试图在我的环境中导入它。我正在使用 apache tomcat 8.0.14 并且出现上述错误。所以我已经将我的服务器更改为 7 版本。我的项目现在运行良好。这听起来不合逻辑。是 apache tomcat 不反向兼容!?请专家澄清一下。
  • 你解决了吗?同样的问题..
  • 不,我已经从这个问题上移开了。我正在使用 tomcat 7.X 版。
  • 我有一个已包含在 Tomcat 8 中的库。我不得不将它从我的项目中删除,然后才工作 :) 不记得是哪个了...

标签: java eclipse servlets


【解决方案1】:

当我在 IntelliJ 中使用的 servlet-api 版本与 Tomcat 8.0.x 中支持的版本冲突时,我遇到了同样的问题...我使用的是 Maven,所以我只是将依赖项更改为这个,然后对我的 webapp 进行了干净的部署,问题就消失了。

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

【讨论】:

  • 嗨,我也有同样的问题。只是为了澄清一下,您是否在 Maven 依赖项中添加了“提供”?
  • 这是一个错误的解决方案/修复,因为您添加了两次相同的依赖项,一个由 tomcat 8 提供,另一个在您的 lib 文件夹中。该错误来自从第三方依赖项添加 servlet-api 2.5。除非您不在为您提供 servlet-api 的容器中。
【解决方案2】:

tomcat 8.0.18,行家。这是关于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>

【讨论】:

    【解决方案3】:

    您应该将 "servlet-api-2.5.jar" 从您的 pom.xml 中可能具有的任何其他依赖项中排除。

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


    我的步骤:

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

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

    然后,只需在您的 javax.servlet-api 依赖项中添加您应该提供的范围。

    如果你把你的 servlet-api 3.0.1+ 添加为“编译”,你可能会同时得到这两个,并且最先加载的将获胜,这一点都不好。

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

    【讨论】:

    • 你应该接受这个。只需注释掉即可为我工作: javax.servletservlet-api2.5
    【解决方案4】:

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

    【讨论】:

    • 我删除了 jsp-api 和 jstl 依赖项(都是 2.1 和 1.2 版本),它对我有用。
    【解决方案5】:

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

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

    成功了!

    【讨论】:

    • 这对我有用,tomcat 8 兼容解决方案!!
    【解决方案6】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 2015-10-15
      • 1970-01-01
      • 2015-04-23
      • 2017-05-10
      • 2013-08-19
      • 2016-07-17
      相关资源
      最近更新 更多