Вы говорите, что новый http-запрос к вашему сервлету «запустит весь жизненный цикл сервлета», что, как уже указывал Александр, не совсем верно. Это просто вызовет другой вызов метода к вашим doGet()
или doPost()
методам.
Я думаю, что вы хотите сказать, что если у вас есть метод doGet
/ doPost
, который содержит код для построения данных, необходимых для RSS-канала с нуля, то каждый запрос вызывает эту выборку данных снова и снова. еще раз.
Если это ваша проблема, и вы исключаете статический контент, просто измените метод Servlet 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 );
}
Если вы хотите хранить элементы в «кэше» только определенное время, вы можете использовать одну из дюжины различных структур кэширования, но идея здесь в том, что вы не восстанавливаете весь граф объектов, необходимый для вашего Ответ RSS с каждым запросом http. Если я правильно читаю ваш первоначальный вопрос, то я думаю, что это то, чего вы надеетесь достичь.