簡體   English   中英

使用Java Servlet的HTTP流

[英]http streaming using java servlet

我有一個基於Servlet的Web應用程序,該應用程序生成兩組數據。 網頁中的一組數據是必不可少的,另一組數據是可選的。 我想盡可能快地渲染基本數據,然后流式傳輸可選數據。 我正在考慮將基本數據寫入HttpServletRequest的輸出流,然后調用HttpServletRequest.flushBuffer()將響應提交給客戶端,但不從Servlet代碼返回,而是創建可選數據,將其寫入再次輸出,然后從servlet代碼返回。 在此方案中可能會出什么問題? 這是實現此目標的標准做法嗎?

</head><body>之間直接刷新響應緩沖區在某種意義上是有意義的,以便瀏覽器盡可能快地檢索對JS / CSS資源的引用。 servlet中這樣做沒有任何意義,因為應該使用JSP來生成HTML。

</head>
<% response.flushBuffer(); %>
<body>

(這是0.01%的情況下可以使用scriptlet的情況之一,因為沒有標簽可以做到這一點;只有在EL 2.2中,您才可以使用${pageContext.response.flushBuffer()}

但是,大多數servlet容器默認情況下已經每2KB刷新一次緩沖區,並且肯定會覆蓋普通Web應用程序上的整個<head> 您可以使用以下方法在服務器配置(有關詳細信息,請參閱服務器文檔)中或在每個JSP的基礎上微調響應緩沖區的大小:

<%@page buffer="1kb" %>

此外,將緩沖區<body> HTML <body>中途刷新到HTML <body>幾乎沒有意義,因為您是否依賴於瀏覽器是否會呈現未烘焙的HTML主體。 例如,在</body>到達之前,MSIE不會顯示任何內容。

完全不同的替代方法是在頁面加載完成后,使用JS / Ajax在后台異步加載“可選”內容。 例如(jQuery風格的):

$(function() {
    $("#somediv").load("somefragment.jsp");
});

也可以看看:

我會這樣做:

  • 以普通的servlet + javascript的形式返回基本數據,以對可選數據進行Ajax調用。 然后將顯示基本數據,而無需等待可選數據。

因此html如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM