java - HttpServletRequest 类型的 getDispatcherType() 方法未定义

标签 java maven servlets tomcat8 nosuchmethoderror

当我从 Eclipse 运行应用程序时,对于 servlet api 3.1.0 和 3.0.1,它运行时没有任何错误。

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

我使用 tomcat 8.0.21 来运行 eclipse。我已经在 ubuntu 机器上设置了 tomcat8,该机器在 tomcat 8.0.14 稳定版本上运行。

不幸的是,如果我使用 servlet api 3.1.0,我会收到以下错误消息。但它适用于旧版本 3.0.1。

root cause

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [50] in the generated java file: [/var/lib/tomcat8/work/Catalina/localhost/ROOT/org/apache/jsp/WEB_002dINF/view/templates/login_002dtemplate_jsp.java]
The method getDispatcherType() is undefined for the type HttpServletRequest

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

为什么我会收到此错误?如何解决这个问题?

最佳答案

如果目标运行时已经提供了开箱即用的 API,则不应随 Web 应用程序存档一起提供 Servlet API。 Tomcat 作为 JSP/Servlet 容器,已经提供了开箱即用的 JSP、Servlet 和 EL API。无论如何,当您将它们与 Web 应用程序一起提供时,您可能会遇到由于来自 Web 应用程序和服务器的运行时类路径中重复的不同版本类而导致的类加载冲突。

添加<scope>provided</scope>目标运行时已提供的那些依赖项。

另请参阅:

关于java - HttpServletRequest 类型的 getDispatcherType() 方法未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619324/

相关文章:

java - 连接两个对象数组的最有效方法

java - jetty 包 org.json.simple 不存在

java - jetty AsyncProxyServlet/AsyncMiddleManServlet

java - Spring Framework Autowiring 空指针异常

java - 在 Java 中重新格式化 JSON 数组的最有效内存方式

java - OpenAL WaveData 错误

java - Java 11 的 GitLab Auto DevOps 问题

java - 如何让maven使用测试资源

eclipse - 如何告诉 Maven 更新 list 的 Bundle-Version?

java - 如何使用 Android 应用程序从 servlet 重复获取数据