0

关于 Java Servlet 有几个问题:

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

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

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

谢谢

4

2 回答 2

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 字段的更多信息。

于 2013-01-17T16:03:40.263 回答
1

关于你的问题2):

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

Also, when a servlet is requested for the first time, the servlet is probably instantiated by the container. (Unless it was instantiated before because you set <load-on-startup>1</load-on-startup> in web.xml, or maybe because the container chose to do so - I'm not sure if implementations are allowed to do that.)

于 2013-01-17T16:42:19.280 回答