首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java web环境中实现RSS提要?

如何在Java web环境中实现RSS提要?
EN

Stack Overflow用户
提问于 2008-10-12 14:15:36
回答 2查看 5.7K关注 0票数 3

我正在为一个协作平台的RSS提要实现工作。假设有数千个不同的协作室,用户可以在其中共享信息,每个协作室都需要发布一个包含新闻、更改等内容的RSS提要。

使用普通的servlet (即http://www.site.com/RSSServlet/?id=roomID)成本很高,每次RSS客户端调用servlet (对于注册到数千个房间中的一个上的RSS的每个用户来说,这将每隔10分钟发生一次),这将触发整个servlet生命周期,这是昂贵的。

另一方面,在硬盘空间和IO操作方面,在磁盘上为数千个房间中的每个房间保留一个静态XML文件的成本也很高……

还有一个限制--使用已经存在的框架可能不是一个选择……

那么,如何在Java环境中实现RSS提要呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-10-14 17:16:50

您说对servlet的新http请求“将触发整个servlet生命周期”,但Alexander已经指出,这并不完全正确。它只会触发对doGet()doPost()方法的另一个方法调用。

我认为您的意思是,如果您有一个doGet/doPost方法,其中包含从头开始构建RSS提要所需的数据的代码,那么每个请求都会一次又一次地触发这种数据获取。

如果这是您关心的问题,并且您排除了静态内容,那么只需修改Servlet /doPost方法来缓存否则将返回的doGet内容,以便处理每个请求并不意味着重新获取所有数据。

例如

代码语言:javascript
复制
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(...) );
}

变成了

代码语言:javascript
复制
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响应所需的整个对象图。如果我没看错你的原始问题,那么我认为这就是你希望实现的目标。

票数 5
EN

Stack Overflow用户

发布于 2008-10-12 14:44:18

您应该尝试一下ROME框架。它对于RSS来说是非常好的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/195537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档