2010-06-24 113 views
0

我試圖使用servlet 3.0 API實現以下行爲:的Servlet 3.0包含HTML頁面

  • 發送inital HTML頁面
  • 發送更新頁面

後續響應除了唯一可以發送初始頁面而沒有得到響應的唯一方式是通過使用HttpResponse Writer進行手動書寫...

我很好如果有一種方法可以使用類似於RequestDispatcher#include和HTML頁面的方式,而不會遇到AsyncContext的問題。有些事情我試着到現在爲止,並沒有工作:

  • 使用AsyncContext#調度:就像我在互聯網上閱讀時,就註定了以使其
  • 發送最終響應的容器
  • 使用RequestDispatcher#forward:由於嘗試在OutputStream中寫入更多內容而導致IllegalStateException
  • use RequestDispatcher#include:如果我在調用此方法之前初始化AsyncContext,request.isAsyncSupported返回true,調用該方法後返回false 。我讀它調用flushBuffer(),並將提交標誌爲true的響應

而且,在Servlet 3.0規範也有一些線路提的是異步的servlet正常的servlet調度是可能的,但將提交回答。我相信一個靜態的HTML頁面屬於這個類別...

如果你有任何想法如何可以完成優雅包括而不影響仍然發送流回應客戶端的能力,請讓我知道。

感謝

回答

0

一個解決方案(不是唯一的一個):如果它只是一個HTML頁面,然後寫html頁面本身的HTML和做需要提供更新serrvlet Ajax調用。

+0

感謝您的回答。我試圖專門使用Servlet 3.0 API來實現服務器推送。所以,我只能發送異步響應。這將是對servlet的一次調用,並且該servlet將返回多個響應(這是通過不提交響應來實現的,只是將其刷新)。 – fmoga 2010-06-24 08:36:10

+0

我還沒有玩過異步API。但有https://atmosphere.dev.java.net/彗星實施!也許值得一看 – Redlab 2010-06-24 09:22:19

0

在頁面上使用靜態元素存儲數據並使用requestdispatcher。

或者你也可以只使用response.setHeader(「refresh」,「5; URL = officer.html」)來簡單刷新整個頁面。

我真的不明白你需要發送多個請求而沒有將響應提交給servlet。你是否嘗試多次與服務線程交互?