Java Servlets将数据传输到浏览器

时间:2013-01-17 15:54:56

标签: java http jsp http-headers servlet-3.0

关于Java Servlets的几个问题:

  

1)当浏览器第一次请求servlet时会发生什么?

     

2)response.setContentType(text,html)是第一条发送到浏览器的指令吗?

一直在网上搜索答案,但不太确定。

谢谢

2 个答案:

答案 0 :(得分:3)

不,首先发送的是HTTP版本:)

   HTTP/1.1 200 OK
   Date: Thu, 17 Jan 2013 21:31:11 GMT
   Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
   Last-Modified: Wed, 01 Jan 2013 21:11:25 GMT
   Content-Type: text/html; charset=UTF-8   

   <HTML>website contents
   here</HTML>

内容之前的最后一行是您正在谈论的内容类型。这些标题可能以不同的顺序出现,通常有更多。他们的订单没有严格定义,也许内容类型会在日期之前发生。但是,HTTP版本号和响应代码(在我的示例中为200 - OK)始终是第一位的。阅读有关HTTP字段here的更多信息。

答案 1 :(得分:1)

关于你的问题2):

Servlet并没有真正向浏览器发送“指令”,它们以某种方式构建响应。他们可能(但可能不会)立即发送标头,或者当您第一次尝试编写响应主体时,当您填充一些内部缓冲区时发送标头,或者他们可以缓冲所有整个响应直到你完成。已发送标头的术语是响应已“已提交”,虽然您可以确定是否已发生给定响应,但您无法真正阻止它从API发生。 (我已经尝试查看Jetty 6的实现,看看会发生什么,但代码不是直截了当,这似乎意味着容器实现在这里有一些余地。)

此外,当第一次请求servlet时,servlet可能由容器实例化。 (除非之前因为你在<load-on-startup>1</load-on-startup>中设置了web.xml而被实例化,或者因为容器选择这样做了 - 我不确定是否允许实现这样做。)