首页 文章

Servlet何时读取或写入实际数据

提问于
浏览
0

我正在测试一个客户端服务器应用程序,以了解Servlet何时实际接收/写入客户端数据 .

测试设置有一个客户端Java程序,它读取文件并将文件POST到Servlet .

只有在客户端完成将整个文件(4 MB)数据写入套接字后,服务器才会开始读取该数据 . 类似地,当Servlet使用PrintWriter发送响应时,只有当Servlet中的doPost(...)方法返回时,响应才会到达客户端 . 通过测试Tomcat内存没有增加...

Servlet连接/会话何时 Build ?当客户端将前几个字节的数据写入套接字时,为什么Servlet不能立即读取数据?

1 回答

  • 2

    这就是它的工作方式 . 在从客户端收到整个请求之前,容器不会调用servlet . 以任何其他方式执行将意味着任何数量的不可预见的后果 . 对于初学者,您必须在所有servlet中进行手动完成检查,这只会添加不必要的样板代码 .

    如果您希望能够在收到HTTP请求后立即对其进行响应,则必须编写自己的套接字程序,绑定并侦听端口并自行处理输入 .

    输出是另一回事 . 输出流缓冲所有servlet输出,但您可以随时在ServletResponse上调用flushBuffer()以强制它发送所有当前缓冲的内容 . 关于此的警告,一旦您开始向客户端发送数据,响应将被视为“已提交” . 这是因为HTTP协议要求某些信息以特定顺序出现 . 例如,必须首先发送标头,这意味着一旦“提交”响应,服务器应用程序就不能再添加标头和cookie . 在servlet完成执行后,容器将始终调用flushBuffer()(或ServletOutputStream上的flush()) .

相关问题