Java:PrintWriter缓冲流的close()之前是否需要flush()?
我有一个网站,只要它从我的服务器发出POST请求(返回字符串),客户端上的web应用程序就会与Safari 7(在OSX 10.9.1 Mavericks上)上的服务器失去连接,但在Safari 5(在Mac 10.6.8 Snow Leopard上)、Firefox、IE、Chrome上工作正常 使用Safari 7的Web Inspector,发出Post操作返回错误Java:PrintWriter缓冲流的close()之前是否需要flush()?,java,safari,Java,Safari,我有一个网站,只要它从我的服务器发出POST请求(返回字符串),客户端上的web应用程序就会与Safari 7(在OSX 10.9.1 Mavericks上)上的服务器失去连接,但在Safari 5(在Mac 10.6.8 Snow Leopard上)、Firefox、IE、Chrome上工作正常 使用Safari 7的Web Inspector,发出Post操作返回错误加载资源失败:网络连接丢失 使用网络分析仪,我检查了发送到服务器和返回的数据包。事实上,一切看起来都很好。并且,HTTP响应的
加载资源失败:网络连接丢失
使用网络分析仪,我检查了发送到服务器和返回的数据包。事实上,一切看起来都很好。并且,HTTP响应的状态为=200(OK)。通过消除过程,我从登录时调用的Java POJO中删除了代码,并最终将错误缩小为一行代码:out.flush()
。我在下面的JavaServlet代码片段中总结了如何使用它。注释掉flush()
我不知道为什么flush()会给Safari带来问题。这似乎是一种非常通用的Java设计模式(即在close()
之前使用flush()
)。据我所知,在Java中,close()
不能保证包含flush()
命令。但是,我确实注意到数据包大小在没有包含flush()
的情况下略有减小,如果收到的字节数与预期的字节数不同,Safari可能会关闭连接。下面的链接表明
当我注释掉flush()
代码时,其他浏览器也可以正常工作
我向Java专家提出的问题:
发出close()
而不先发出flush()
的设计模式是否稳健?我会遇到问题吗?为什么
有谁能更好地解释为什么Safari不喜欢flush()
-----------Javaservlet---------
在…
中发生了什么?您是否在servlet中使用了RequestDispatcher
?@SotiriosDelimanolis--..
只接受用户的电子邮件地址和密码(例如getParameter
),然后查询返回variable1
、variable2
等的数据库。我将更新问题以包含这一点。没有使用RequestDispatcher
。相关链接:
package com.mycompany.servlet;
...
public class UserLogin extends HttpServlet {
protected void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
...
// get input parameters
userEmail=req.getParameter("uEmail");
userPwd=req.getParameter("uPwd");
// query database to retrieve variable1, variable2, etc.
...
// write output response
PrintWriter out = res.getWriter();
out.println(variable1);
out.println(variable2);
out.println(variable3);
...
out.flush(); // this line causes Safari 7.0 on Mac OSX 10.9.1 to lose connection
out.close();
}
}