您说对您的 servlet 的新 http 请求“将触发整个 servlet 生命周期”,正如 Alexander 已经指出的那样,这并不完全正确。它只会触发对您的doGet()
ordoPost()
方法的另一个方法调用。
我认为您的意思是,如果您有一个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请求。如果我正在阅读您的原始问题,那么我认为这就是您希望实现的目标。