[英]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");
});
我會這樣做:
因此html如下所示:
<html>
<body>
essential data
<javascript to do ajax call>
essential data
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.