Tomcat 7.0.57上的Grails 3.3.0

时间:2017-09-07 23:45:55

标签: grails grails-controller grails-3.3

我们正在尝试在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'
}

还有别的尝试吗?

1 个答案:

答案 0 :(得分:2)

事实证明问题是由加载类OnCommittedResponseWrapper时的Groovy内省造成的,其中包含:

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

将@GrailsCompileStatic添加到使用响应outputStream的方法中,方法如下:

response.outputStream << someBytes

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