我很少尝试一些HttpServlet东西来更好地理解它。我想构建一个请求传入的场景,我需要相应且尽可能快地发送响应,并在以后在Servlet中做更多工作。根据我目前的理解,仅应在返回doGet或doPost方法时将响应发送到客户端。但是从我的示例来看,响应已在Servlet中的命令处理过程中发送回客户端。因此,当我不希望它返回时,它已经返回了。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(DisplayHeader.class.getName()).log(Level.SEVERE, null, ex);
}
response.setContentType("text/plain; charset=ISO-8859-1");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
final StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);
//TODO most be implemented SynchronizedStatusCodeDimo
out.println("StatusCode=0");
out.println("StatusText=Accepted");
out.println("paymentType=PaymentXY");
out = response.getWriter();
out.print(sw.toString());
out.flush();
out.close();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(DisplayHeader.class.getName()).log(Level.SEVERE, null, ex);
} }
Run Code Online (Sandbox Code Playgroud)
通过Firebug,这里发生了什么,我看到我已经收到510毫秒后生成的响应。我以为我会因为睡眠而需要1500毫秒以上的时间。我的理解是基于此信息:链接
该HttpServletResponse会由servlet容器(Tomcat的,码头等)进行控制。
如果您写入responseservlet容器,则会response在定义的缓冲区大小后自动刷新(例如9000字节后的Tomcat)。通常,您可以配置它(在Tomcat中使用参数socketBuffer)。如果您不自己控制它,这就是它的工作方式。
在您的情况下,您可以自行控制响应,并在致电后将response.flush()响应发送给客户端。如果您写了更多的9000字节(在Tomcat中),则响应将自动发送(在所有消息中间)。
(对不起,我的英语不好)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |