你說你servlet的一個新的http請求「會觸發整個servlet的生命週期」,就像Alexander已經指出的那樣,這不完全正確。它會簡單地觸發另一個方法調用您的doGet()
或doPost()
方法。
我想你的意思是說,如果你有一個包含代碼來構建需要從頭RSS源的數據doGet
/doPost
方法,那麼每個請求觸發了一遍又一遍這個取數據的內容。
如果這是您關心的問題,並且您決定使用靜態內容,只需修改Servlet的方法來緩存您將返回的RSS內容,以便處理每個請求並不意味着重新獲取所有數據全部重新。
例如
public void doGet(HttpServletRequest request, HttpServletResponse response) {
//build the objects you need for the RSS response
Room room = getRoom(request.getParameter("roomid"));
//loadData();
//moreMethodCalls();
out.println(createRssContent(...));
}
成爲
Map rssCache;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
//Map is initialized in the init() method or somewhere else
String roomId = request.getParameter("roomid");
String rssDocument = rssCache.get(roomId);
if (rssDocument == null) {
//build the objects you need for the RSS response
Room room = getRoom(roomId);
//loadData();
//moreMethodCalls();
rssDocument = createRssContent(...);
rssCache.put(roomId, rssDocument);
}
out.println(rssDocument);
}
如果你只是想存儲在一個「緩存」的項目進行了一定的時間,你可以使用十幾種不同的緩存框架之一,但這裏的想法是,你不需要重建每個http請求的RSS響應所需的整個對象圖。如果我正在閱讀你原來的問題,那麼我認爲這是你希望完成的。
爲什麼你說每個RSS請求都會觸發整個servlet生命週期。通常,servlet將被初始化一次,然後將保持活動狀態,直到容器終止。然後,請求會觸發的唯一事情就是servlet處理請求的方法。 – Alexander 2008-10-13 10:58:51