RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty

在这篇文章中,我将展示一些创建Spring Web应用程序的准则,使用Jetty以及使用名为ROME的外部库运行RSS来运行它。

一般

我最近创建了一个示例Web应用程序,充当RSS阅读器。 我想检查ROME以阅读RSS。 我还想使用Spring容器和MVC创建最简单的视图的应用程序。 为了快速开发,我将Jetty用作服务器,并为其使用了一个简单的java类。
所有代码都可以在GitHub,eyalgo / rss-reader上找到

内容

  1. Maven依赖
  2. 码头服务器
  3. Spring依赖
  4. SpringMVC
  5. 罗马

Maven依赖

起初,我无法使用正确的Jetty版本。 有一个带有group-id mortby,另一个带有eclipse。 经过一番仔细的检查和反复试验,我拿下了日食的图书馆。 春天只是标准。 我在GutHub下找到了最新版本的ROME。 它仍然是快照。

这是依赖项列表:

  • 弹簧
  • 码头
  • 罗马和罗马取球器
  • 登录和slf4j
  • 用于检测
    • 朱尼特

码头服务器

几年前,我一直在使用Wicket框架,并且了解Jetty及其易于使用的服务器创建方法。 我决定朝这个方向前进,并跳过运行WAR部署的标准Web服务器。

有几种创建Jetty服务器的方法。 我决定使用Web应用程序上下文创建服务器。

首先,创建上下文:

private WebAppContext createContext() {
  WebAppContext webAppContext = new WebAppContext();
  webAppContext.setContextPath("/");
  webAppContext.setWar(WEB_APP_ROOT);
  return webAppContext;
}

然后,创建服务器并将上下文添加为处理程序:

Server server = new Server(port);
  server.setHandler(webAppContext);

最后,启动服务器:

try {
    server.start();
  } catch (Exception e) {
    LOGGER.error("Failed to start server", e);
    throw new RuntimeException();
  }

一切都在https://github.com/eyalgo/rss-reader/tree/master/src/test/java/com/eyalgo/rssreader/server下。

Spring项目结构

RSS阅读器项目结构

RSS阅读器项目结构

Spring依赖

在web.xml中,我声明了application-context.xml和web-context.xml。 在web-context.xml中,我告诉Spring要扫描组件: <context:component-scan base-package="com.eyalgo.rssreader"/>
我在application-context.xml中添加了一个bean,它是一个外部类,因此无法对其进行扫描(使用注释):
<bean id="fetcher" class="org.rometools.fetcher.impl.HttpURLFeedFetcher"/>

除了扫描之外,我还在正确的类中添加了正确的注释。
@Repository
@Service
@Autowired

SpringMVC

为了对RSS提要(和原子)有一些基本的了解,我使用了一个简单的MVC和JSP页面。 要创建控制器,我需要为该类添加@Controller 。 我添加了@RequestMapping("/rss")因此所有请求都应以rss为前缀。 每个方法都有一个@RequestMapping声明。 我认为一切都是GET

向请求添加参数

只需在方法的参数之前添加@RequestParam("feedUrl")

重定向请求

添加RSS位置后,我想重定向答案以显示所有当前RSS项目。 因此,添加RSS feed的方法需要返回String。 返回值是: “ redirect:all”

@RequestMapping(value = "feed", method = RequestMethod.GET)
  public String addFeed(@RequestParam("feedUrl") String feedUrl) {
    feedReciever.addFeed(feedUrl);
    return "redirect:all";
  }

返回一个ModelAndView类

在Spring MVC中,当方法返回String时,框架将查找具有该名称的JSP页面。 如果没有,那么我们会得到一个错误。 (如果只想返回String,则可以在方法中添加@ResponseBody 。)

为了使用ModelAndView ,您需要创建一个名称为: ModelAndView modelAndView = new ModelAndView("rssItems");
该名称将告诉Spring MVC引用哪个JSP。 在此示例中,它将查找rssItems.jsp

然后,您可以添加到ModelAndView“对象”:

List<FeedItem> items = itemsRetriever.get();
  ModelAndView modelAndView = new ModelAndView("rssItems");
  modelAndView.addObject("items", items);

在JSP页面中,您需要引用添加的对象的名称。 然后,您可以访问它们的属性。 因此,在此示例中,我们在rssItems.jsp中具有以下内容

<c:forEach items="${items}" var="item">
    <div>
      <a href="${item.link}" target="_blank">${item.title}</a><br>
        ${item.publishedDate}
    </div>
  </c:forEach>
注意

Spring“知道”将jsp作为ModelAndView名称的后缀添加,因为我在web-context.xml中声明了它。 在类的Bean中: org.springframework.web.servlet.view.InternalResourceViewResolver 。 通过设置前缀,这个bean也告诉Spring要寻找jsp页面。 敬请期待:

错误处理

Spring MVC中有几种处理错误的方法。 我选择了一种通用方式,对于任何错误,都会显示一个通用错误页面。 首先,将@ControllerAdvice添加到要处理错误的类。 其次,针对要捕获的异常类型创建一个方法。 您需要使用@ExceptionHandler注释该方法。 参数告诉此方法将处理哪个异常。 您可以为IllegalArgumentException提供一个方法,为不同的异常提供另一个方法,依此类推。 返回值可以是任何值,它将用作常规控制器。 这意味着,例如,使用一个带有该方法返回的对象名称的jsp。 在此示例中,该方法捕获所有异常并激活error.jsp ,将消息添加到页面。

@ExceptionHandler(Exception.class)
  public ModelAndView handleAllException(Exception e) {
    ModelAndView model = new ModelAndView("error");
    model.addObject("message", e.getMessage());
    return model;
  }

罗马

ROME是一个易于使用的库,用于处理RSS feed: https : //github.com/rometools/rome
rome-fetcher是一个附加库,可帮助从外部资源(例如HTTP或URL)获取(获取)RSS feed: https : //github.com/rometools/rome-fetcher

截至目前,最新版本是2.0.0-SNAPSHOT。

有关如何读取输入的RSS XML文件的示例,可以在以下网址找到: https : //github.com/eyalgo/rss-reader/blob/master/src/test/java/com/eyalgo/rssreader/runners/MetadataFeedRunner。Java

为了让生活更轻松,我使用了罗马提取器。 它使您能够提供URL(RSS提要)并排除所有SyndFeed 。 如果需要,您可以添加缓存,这样它就不会下载缓存的项目(已下载的项目)。 您所需要做的就是在构造函数中使用FeedFetcherCache参数创建访存器。

用法:

@Override
  public List<FeedItem> extractItems(String feedUrl) {
    try {
      List<FeedItem> result = Lists.newLinkedList();
      URL url = new URL(feedUrl);
      SyndFeed feed = fetcher.retrieveFeed(url);
      List<SyndEntry> entries = feed.getEntries();
      for (SyndEntry entry : entries) {
        result.add(new FeedItem(entry.getTitle(), entry.getLink(), entry.getPublishedDate()));
      }
      return result;
    } catch (IllegalArgumentException | IOException | FeedException | FetcherException e) {
      throw new RuntimeException("Error getting feed from " + feedUrl, e);
    }
}
注意

如果收到警告消息(看起来像System.out),提示fetcher.properties丢失,只需在资源下(或类路径的根目录下)添加一个空文件。

摘要

这篇文章涵盖了几个主题。 您还可以查看许多代码的测试方式。 检查匹配器和模拟。 如果您有任何意见,请留言。

翻译自: https://www.javacodegeeks.com/2014/06/rss-reader-using-rome-spring-mvc-embedded-jetty.html

rss 开源rome 开源项目,实现RSS 文件的生成和解析,RSS标准虽然混乱,但是其本质都是XML文档。 立即下载

相关推荐

RSS开源框架ROME1.0下载集合

RSS开源框架ROME1.0下载集合 1.rome-1.0-javadoc 2.rome-1.0-sources

javarss解析器(rome.jar和jdom.jar)示例

主要介绍了javarss解析器(rome.jar和jdom.jar)示例,需要的朋友可以参考下

rome 实现rss订阅,中文出错解决方法

在做的过程中遇到中文字符出错的问题,网上也有很多人提出来,但是好能解决的不多,如果你也遇到这个问题,请详细看本文档!

Feed、RSS、Atom概念对比及ROME实战

Feed、RSS:示例、规范、阅读器;Atom、Atom对比RSSROME、实战。

lonelymanontheway的博客 2876

rome实现rss订阅与发布

1.Rss 2.Rome发布RSS 3.Rome代理订阅RSS

2446

推荐开源项目:ROME —— JavaRSS和Atom框架

在互联网信息爆炸的时代,RSS和Atom作为一种高效的信息订阅方式,仍然扮演着重要的角色。如果你正在寻找一个强大的Java库来处理这些 feeds,那么【ROME】绝对值得你的关注。 ## 项目介绍 [ROME](https://travis-ci.org/rometools/rome) 是一个功能完备的Java框架,专为RSS(Really Simple Syndication)和Atom ...

gitblog_00054的博客 620

Rome解析RSS

 用Rome解析Rss的例子 需要的jar包      rome.jar 可到http://wiki.java.net/bin/view/Javawsxml/Rome下载最新的      jdom.jar   java代码   package com.test; import java.net.URL; import java.util.List; impor...

风之影 914

rome rss_RSS阅读器使用ROMESpring MVC嵌入式Jetty

rome rss 在这篇文章中,我将展示一些创建Spring Web应用程序的指南,这些应用程序使用Jetty使用名为ROME的外部库运行RSS来运行它。 一般 我最近创建了一个示例Web应用程序,充当RSS阅读器。 我想检查ROME以阅读RSS。 我还想使用Spring容器和MVC创建最简单的视图的应用程序。 为了快速开发,我将Jetty用作服务器,并为其使用了一个简单的java类。 ...

最佳 Java 编程 179

rome_RSS阅读器使用ROMESpring MVC嵌入式Jetty

rome 在这篇文章中,我将展示一些创建Spring Web应用程序的准则,这些应用程序使用Jetty使用名为ROME的外部库运行RSS来运行它。 一般 我最近创建了一个示例Web应用程序,充当RSS阅读器。 我想检查ROME以阅读RSS。 我还想使用Spring容器和MVC创建最简单的视图的应用程序。 为了快速开发,我将Jetty用作服务器,并为其使用了一个简单的Java类。所有代码都可以在...

cunfen8879的博客 328

Spring boot 入门 使用rome实现RSS 订阅

引言     在本教程中,学习从spring boot应用程序创建和使用RSS和Atom提要。 您必须在各种网站上(例如我们的RSS提要)以文本或图像按钮的形式看到这一点,邀请您“通过RSS订阅”。RSS是简单的联合API - 通常称为Rich Site Summary。 RSS革新了用户与在线内容交互的方式。     与RSS类似,Atom也是基于XML的Web内容和元数据联合格式,以及用于发...

菜鸟的博客 3559

vscode-rss:嵌入在Visual Studio Code中的RSS阅读器

VSCode-RSS 嵌入在Visual Studio Code中的RSS阅读器 介绍 VSCode-RSS是Visual Studio Code扩展,提供了嵌入式RSS阅读器。 有了它,经过长时间的编码,您可以在VSCode中自由阅读新闻和博客。 和 ,可让您在设备之间同步RSS。 VSCode-RSS易于使用,几乎不需要手动修改配置。 多个帐户; 支持Tiny Tiny RSS; 支持阅读器; 支持多种RSS格式; 自动更新; 支持收藏夹; 滚动通知; 已读/未读标记; 用法 帐目 VSCode-RSS具有三种类型的帐户:本地帐户,TTRSS(Tiny Tiny RSS)帐户和Inoreader帐户。 VSCode-RSS将默认创建一个本地帐户。 本地帐号 对于本地帐户,它将在本地存储数据。 单击“帐户”视图上的“ +”按钮,然后选择“本地”选项,然后输入帐户名称以创

RSS ROME

rome实现rss订阅与发布 . http://blog.csdn.net/zhang_kevin_wei/article/details/6200487 开源项目ROME来提供RSS的解决方案 http://liureying.blog.163.com/blog/static/615135200903115640/...

Just for record 239

通过rome实现RSS订阅

首先需要准备下环境(需要的jar包): rome-1.0.jar (下载地址:http://download.csdn.net/detail/y397126710/4323863) jdom-1.0.jar (下载地址:http://download.csdn.net/detail/y397126710/4323870) 这两个包的版本必须一致,建议全部使用1.0版本。网上虽然有提供了很多下

y397126710的专栏 2553

java rss rome_java使用rome.jar实现rss阅读功能

rome是一个很好用的解析rss的工具包,支持rote格式,最近在项目中使用了此包,共享给大家。在此只公开部分代码public class FeedReader {public static void main(String[] args) {String source = "http://www.36kr.com/feed";// source = "http://news.163.com/sp...

weixin_34900026的博客 305

初学 Rome 之解析RSS

beidou321的专栏 1131

使用Rome解析百度RSS

public class TestParse { private static result r; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public void parseRss(String rss, String keyword) { try { URL url = new URL(rss);

zjjee的专栏 1864

java rss rome_Rome介绍 javaRSS阅读,发布器

Rome是为RSS聚合而开发的一个框架,让你可以快速的开发基于javaRSS阅读,发布器,支持RSS 0.91 NetscapeRSS 0.91 UserlandRSS 0.92RSS 0.93RSS 0.94RSS 1.0RSS 2.0Atom 0.3Atom 1.0等标准。你也可以自己扩展他的Module,让他解析你自己定义的XML格式。可以说它是一种用途很广的框架,在使用它之前。你必须下载...

weixin_34643336的博客 364
上一篇: 测试Hibernate的最低配置
下一篇: Java 8默认方法可能会破坏您的(用户)代码
dnc8371
博客等级 码龄11年 421粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值