【问题标题】:Grails 3.3.0 on Tomcat 7.0.57Tomcat 7.0.57 上的 Grails 3.3.0
【发布时间】:2017-09-07 23:45:54
【问题描述】:

我们正在尝试在 Tomcat 7.0.57 下的 Grails 3.3.0 中使用 response.outputStream。然而,当任何字节被写入流时,我们会得到这个错误:

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/WriteListener

这似乎来自 3.1 Servlet 规范?但是Tomcat 7不支持3.1,只支持3.0。但是,我们通过在依赖项中执行此操作,将 Grails 应用程序定位到我们正在部署的 Tomcat 版本:

provided "org.springframework.boot:spring-boot-starter-tomcat"

这个,稍后在 build.gradle 文件中:

war {
   ext['tomcat.version'] = '7.0.57'
}

还有什么要尝试的吗?

【问题讨论】:

    标签: grails grails-controller grails-3.3


    【解决方案1】:

    原来问题是由加载类 OnCommittedResponseWrapper 时的 Groovy 自省引起的,该类有:

        public void setWriteListener(WriteListener writeListener) {
            this.delegate.setWriteListener(writeListener);
        }
    

    将@GrailsCompileStatic 添加到以如下方式使用响应输出流的方法中:

    response.outputStream << someBytes
    

    将避免内省,然后使其在 Tomcat 7 上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-27
      • 2015-10-13
      • 2017-11-09
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多