あなたは、サーブレットへの新しい http リクエストが「サーブレットのライフサイクル全体をトリガーする」と言いますが、Alexander がすでに指摘しているように、これは正確には正しくありません。doGet()
またはメソッドへの別のメソッド呼び出しをトリガーするだけdoPost()
です。
あなたが言いたいのは、RSS フィードに必要なデータをゼロから作成するコードを含むdoGet
/メソッドがある場合、各要求がこのデータのフェッチを何度もトリガーするということだと思います。doPost
これが懸念事項であり、静的コンテンツを除外する場合は、サーブレットdoGet
/doPost
メソッドを変更して、通常は返される 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 );
}
アイテムを一定期間だけ「キャッシュ」に保存したい場合は、さまざまなキャッシング フレームワークの 1 つを使用できますが、ここでの考え方は、RSS 応答に必要なオブジェクト グラフ全体を再構築しないということです。各 http リクエスト。元の質問を正しく読んでいる場合、これがあなたが達成したいことだと思います。