关于Java Servlets的几个问题:
1)当浏览器第一次请求servlet时会发生什么?
2)response.setContentType(text,html)是第一条发送到浏览器的指令吗?
一直在网上搜索答案,但不太确定。
谢谢
答案 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
而被实例化,或者因为容器选择这样做了 - 我不确定是否允许实现这样做。)