使用JavaServlet的http流

使用JavaServlet的http流,java,http,jakarta-ee,servlets,Java,Http,Jakarta Ee,Servlets,我有一个基于servlet的web应用程序,它生成两组数据。网页中的一组数据是必需的,另一组数据是可选的。我希望尽可能快地呈现基本数据,然后将可选数据流化。我正在考虑将基本数据写入HttpServletRequest的输出流,然后调用HttpServletRequest.flushBuffer()将响应提交给客户端,但不从servlet代码返回,而是创建可选数据,再次将其写入outputstream,然后从servlet代码返回。 在这个计划中有哪些地方可能出错?这是实现这一目标的标准做法吗?我

我有一个基于servlet的web应用程序,它生成两组数据。网页中的一组数据是必需的,另一组数据是可选的。我希望尽可能快地呈现基本数据,然后将可选数据流化。我正在考虑将基本数据写入
HttpServletRequest
的输出流,然后调用
HttpServletRequest.flushBuffer()
将响应提交给客户端,但不从servlet代码返回,而是创建可选数据,再次将其写入outputstream,然后从servlet代码返回。
在这个计划中有哪些地方可能出错?这是实现这一目标的标准做法吗?

我会这样做:

  • 以普通servlet+javascript的形式返回基本数据,以执行Ajax调用可选数据。然后显示基本数据,不显示可选数据
因此html将如下所示:

<html>
   <body>
        essential data
        <javascript to do ajax call>
        essential data
   </body>
</html>

基本数据
基本数据

直接在
之间刷新响应缓冲区是有意义的,这样浏览器就可以尽快检索到JS/CSS资源的引用。在一个特定的环境中这样做是没有意义的,因为它是用来生成HTML的用户

</head>
<% response.flushBuffer(); %>
<body>
此外,将缓冲区刷新到HTML
的一半几乎毫无意义,因为您依赖于浏览器是否会呈现半成品HTML正文。例如,MSIE在到达
之前不显示任何内容

另一种完全不同的方法是在页面加载完成后,使用JS/Ajax在后台异步加载“可选”内容。例如(jQuery风味):

另见:

这是什么类型的数据?HTML?是的,这是一个普通的HTML页面,包含js、css和HTML。我知道Ajax方法可能是最好的选择。然而,只有一件事阻碍了我使用这种方法,那就是,如果我使用Ajax方法,tomcat web服务器上的请求数将增加一倍。我不确定会有一些基础设施问题。所以,像CSS/JS/images这样的资源请求不值得担心吗?对不起,你的担心毫无意义。使用ajax,带宽只需在同一连接上的多个请求上进行分配。度量就是知道。资源请求值得担心,这就是为什么它们是从像akami这样的CDN域提供服务的。
<%@page buffer="1kb" %>
$(function() {
    $("#somediv").load("somefragment.jsp");
});