【问题标题】:Grails project - Servlet call - ClassNotFoundException: javax.servlet.AsyncContextGrails 项目 - Servlet 调用 - ClassNotFoundException:javax.servlet.AsyncContext
【发布时间】:2026-02-02 21:15:02
【问题描述】:

我正在使用

  • intellij idea Ultimate 12..4
  • grails 2.2.0,
  • grails.servlet.version = BuildConfig.groovy 文件中的“2.5”

并实现了简单的 servlet 发布请求。使用 RESTClient 进行发布请求我发现了这些场景

场景:

  • 当我在本地使用时,它工作正常。网址:localhost:9090/testProject/api/testReport

  • 但是当我在本地服务器中部署它时,会显示以下错误消息 URL:192.168.1.10:9090/testProject/api/testReport

本地服务器配置与本地主机一样......

code:   
ERROR errors.GrailsExceptionResolver  - ClassNotFoundException occurred when processing request: [POST] /testProject/api/testReport
        javax.servlet.AsyncContext. Stacktrace follows:
        java.lang.ClassNotFoundException: javax.servlet.AsyncContext
                at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
                at java.lang.Class.getDeclaredMethods(Class.java:1808)
                at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
                at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
                at org.grails.jaxrs.support.ConverterUtils.jsonToMap(ConverterUtils.groovy:94)
                at org.grails.jaxrs.support.DomainObjectReaderSupport.readFromJson(DomainObjectReaderSupport.groovy:124)
                at org.grails.jaxrs.support.DomainObjectReaderSupport.readFrom(DomainObjectReaderSupport.groovy:93)
                at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474)
                at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
                at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
                at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
                at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)
                at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
                at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
                at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
                at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
                at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
                at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
                at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
                at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
                at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
                at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
                at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
                at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
                at org.grails.jaxrs.web.JaxrsContext$JaxrsServiceImpl.process(JaxrsContext.java:192)
                at org.grails.jaxrs.JaxrsController$_closure1.doCall(JaxrsController.groovy:48)
                at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
                at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
                at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
                at java.lang.Thread.run(Thread.java:722)

【问题讨论】:

  • 您好 WillTryCodelt,在问我的问题之前,我已经看到了您提供的问题和评论。我没有解决我的问题....通过答案。
  • 尝试将 grails.servlet.version 更改为 3.0
  • 试过但没有解决办法。我认为缺少库路径....但找不到在哪里写...

标签: java servlets grails intellij-idea


【解决方案1】:

经过几天的搜索和整合,我找到了解决方案.....

  1. 为什么ClassNotFoundException异常在这里出现频率最高这篇文章真的不错……

    http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html

  2. 问题的主要原因显示日志java.lang.ClassNotFoundException: javax.servlet.AsyncContext

    这意味着它没有找到 javax.servlet-3.0 提供的 asyncContext 类。在 servlet 2.5 中它丢失了。

我在 localhost 中运行 Apache Tomcat 7,但在本地服务器 192.168.1.10 我运行 Apache Tomcat 6。在给定的链接中,apache doc 说的是 servlet 版本。

 So the solution is either anyone upgrade the Apache Tomcat 6 to Apache Tomcat 7
 or posting the file javax.servlet-3.0 in Apache Tomcat 6 lib folder.
 [Here][3] is the jar file.

【讨论】:

    【解决方案2】:

    您还可以强制 Grails 应用使用 Servlet 2.5 在你的 BuildConfig.groovy

    grails.servlet.version = "2.5"

    希望对你有帮助

    爱德华

    【讨论】: