Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat在并发请求上过早提交响应_Tomcat_Servlets - Fatal编程技术网

Tomcat在并发请求上过早提交响应

Tomcat在并发请求上过早提交响应,tomcat,servlets,Tomcat,Servlets,我有一个问题,Tomcat8.5提交响应太早了。如果存在多个并发请求,则可能会在只添加四个小标题的筛选器之后直接提交响应(在我的示例中为Spring Security),因此我无法在servlet中再设置状态。是否有任何共享缓冲区或类似的东西,我可以增加,以避免这种行为 如果没有这样的配置,我必须以一种缓存头的方式包装响应,直到写入正文或响应准备就绪,是否有任何最佳实践或准备使用的实现?您确定(或spring)没有在servlet输出流或响应打印器上调用flush()?您可以在org.apach

我有一个问题,Tomcat8.5提交响应太早了。如果存在多个并发请求,则可能会在只添加四个小标题的筛选器之后直接提交响应(在我的示例中为Spring Security),因此我无法在servlet中再设置状态。是否有任何共享缓冲区或类似的东西,我可以增加,以避免这种行为


如果没有这样的配置,我必须以一种缓存头的方式包装响应,直到写入正文或响应准备就绪,是否有任何最佳实践或准备使用的实现?

您确定(或spring)没有在servlet输出流或响应打印器上调用
flush()
?您可以在
org.apache.coyote.Response
中的
volatile boolean committed=false
字段上设置访问断点,以检查谁提交了响应是的,我已经使用Springs记录了对响应的所有访问,这将刷新响应,我还编写了一个非常难看的java代理,使用ByteBuddy跟踪响应上的所有方法调用,并且只有spring security的addHeader()调用,下一步尝试设置由于响应已提交而无法工作的状态。我无法设置任何断点,因为如果使用调试器启动,则不会出现问题:(我已经考虑过更改tomcat源代码,并在使用
new Exception()
提交响应时添加日志记录,以获得堆栈跟踪…头值有多大?如果内存响应的大小超过该缓冲区的大小,tomcat的缓冲区可以自动刷新。您可能只需要增加该缓冲区的大小。