【问题标题】:Java Servlets transmitting data to browserJava Servlet 向浏览器传输数据
【发布时间】:2013-01-01 05:16:52
【问题描述】:

关于 Java Servlet 有几个问题:

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

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

一直在网上寻找答案,但不太确定。

谢谢

【问题讨论】:

  • 阅读 Head First Servlet 和 JSP。所有这些概念都解释清楚了,尤其是对于初学者来说这本书太好了

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


【解决方案1】:

不,首先要发送的是 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

【讨论】:

  • 您好,感谢您的回答,我只是想知道您是否知道 servlet 中空指针异常的典型原因是什么?
  • @user1344192 与任何 Java 程序中的相同,取消对 null 的引用。 (没有典型的根本原因,因为它取决于整个应用程序中的数据流。)启动调试器,让它在发生异常的行之前中断,并检查其中的表达式以查看哪个为空.
【解决方案2】:

关于您的问题 2):

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

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

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多