rome rss

在这篇文章中,我将展示一些创建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。 经过一番仔细的检查和反复试验后,我拿起了Eclipse库。 春天只是标准。 我在GutHub下找到了最新版本的ROME。 它仍然是快照。

这是依赖项列表:

  • 弹簧
  • 码头
  • 罗马和罗马取球器
  • 登录和slf4j
  • 用于检测
    • 朱尼特
  • 该项目的pom文件可以在以下位置找到: https : //github.com/eyalgo/rss-reader/blob/master/pom.xml

码头服务器

几年前,我一直在使用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阅读器项目结构

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
@Controller

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页面。 敬请期待:

  • https://github.com/eyalgo/rss-reader/blob/master/src/main/java/com/eyalgo/rssreader/web/RssController.java
  • https://github.com/eyalgo/rss-reader/blob/master/src/main/webapp/WEB-INF/views/rssItems.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提要: https : //github.com/rometools/rome 。
rome-fetcher是一个附加的库,可帮助从外部资源(例如HTTP或URL)获取(获取)RSS提要: 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参数创建访存器。

用法:

@Overridepublic 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);}
}
  • https://github.com/eyalgo/rss-reader/blob/master/src/main/java/com/eyalgo/rssreader/service/rome/RomeItemsExtractor.java

注意

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

摘要

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

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

rome rss

rome rss_RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty相关推荐

  1. java 拦截器 排除_java – Spring MVC Interceptor排除HTTP方法的路径

    我有一些拦截器需要在我的API的一些请求中检查标头和授权.例如,某些请求应该要求用户身份验证(例如,从数据库更改用户详细信息),有些请求不需要身份验证(例如,创建用户).不幸的是,从拦截器中排除路径的 ...

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

    在这篇文章中,我将展示一些创建Spring Web应用程序的准则,使用Jetty以及使用名为ROME的外部库运行RSS来运行它. 一般 我最近创建了一个示例Web应用程序,充当RSS阅读器. 我想检查 ...

  3. Spring MVC配置多个视图解析器(FreeMarker,JSP)

    Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...

  4. Spring mvc中自定义拦截器

    一.要实现的一个功能: 1.打开特定的一些页面时必需强制用户进行登录. 2.登录后再返回到之前的页面. 二.先写一个service,实现从cookie中判断用户是否登录. 1.TT_TOKEN为登录成 ...

  5. spring mvc中的拦截器

    本文说下spring MVC中的拦截器 文章目录 拦截器介绍 拦截器注入适配器 自定义拦截器 controller测试 测试结果 本文小结 拦截器介绍 拦截器是在servlet执行之前执行的程序(这里 ...

  6. Spring MVC拦截器(Interceptor)的配置及使用

    在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览.对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求.在Struts 2 框架中,拦截器是其重要的组成部分,Spring ...

  7. SSM框架之Spring MVC(四)异常处理和拦截器实现

    一.SpringMVC中的异常处理 1.1异常处理的思路 系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通 ...

  8. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  9. Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解

    基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...

最新文章

  1. 成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'express'
  2. [攻防世界 pwn]——CGfsb
  3. Nginx快速搭建和基本使用
  4. python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...
  5. 数据调度组件:基于Azkaban协调时序任务执行
  6. checkbox 在火狐的不支持
  7. SparkStreaming 入门案例之wordcount
  8. [TCP/IP] 传输层-ethereal 抓包分析TCP包
  9. 推荐系统回顾,FFM引入特征域进一步增强了模型的表达能力。大规模分段线性模型LS-PLM
  10. 高斯拉盖尔(Gauss-Laguerre)法则求积分(python,数值积分)
  11. 软件架构图——RUP4+1架构方法
  12. 工业场景知识图谱落地实战
  13. “禁止燃放烟花爆竹”社会治理创新活动
  14. 3D相机面临的困难问题和解决方案
  15. 转简单之美——系统设计黄金法则
  16. 梅科尔工作室——鸿蒙设备开发实战004:内核开发
  17. 求1~n中0~9出现的次数
  18. java 大数据处理之内存溢出解决办法
  19. java接口设计规范_关于团队API接口规范设计
  20. 香港城市大学计算机科学申请,75均分CS专业学生获香港城市大学offer

热门文章

  1. 【做题记录】P4211 [LNOI2014]LCA
  2. Korney Korneevich and XOR(CF750F1/F2)
  3. 【LCT】洞穴勘测(luogu 2147/金牌导航 LCT-1)
  4. 初二模拟赛总结(2019.8.7)
  5. 4、mybatis通过配置类Configuration 实现初始化
  6. Hadoop生态Flume(二)安装配置
  7. Spring Boot 面试题
  8. 经典笔试编程题--Java实现
  9. String.format()方法的使用
  10. JS中遍历数组的两种方式