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

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阅读器项目结构

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统输入中文方式

我目前知道Ubuntu有两个还算好用的中文输入法&#xff1a; Fcitx&#xff1a;它是Linux世界开源的输入法框架&#xff0c;提供 Google PinYin、ShuangPin、SunPinYin、Wubi、ZhengMa、Hong Kong 和 TaiWan繁体等输入法。 1 安装Fcitx sudo apt install fcitx-pinyin fcit…

针对JDK 14提议的另外六个JEP

Mark Reinhold最近的消息宣布了六个新的“建议针对JDK 14的JEP ”&#xff1a; JEP 345 &#xff0c; JEP 361 &#xff0c; JEP 363 &#xff0c; JEP 364 &#xff0c; JEP 365和JEP 367 。 假设没有异议由11月7日提出&#xff0c;这些JEPs将有针对性地JDK 14与之前定位JEPs沿…

VMWare建立于W10的共享文件夹

一、共享文件夹建立 在虚拟机设置 -> 文件夹共享&#xff0c;选择总是启用&#xff0c;点击添加&#xff1a; 直接点击下一步&#xff1a; 选择原系统共享文件夹位置&#xff0c;并命名&#xff1a; 选择启用此共享&#xff0c;并继续&#xff1a; 二、VMtools安装 虚拟机…

Ubuntu中root用户和user用户的相互切换

Ubuntu是最近很流行的一款Linux系统&#xff0c;因为Ubuntu默认是不启动root用户&#xff0c;现在介绍如何进入root的方法。 &#xff08;1&#xff09;从user用户切换到root用户 不管是用图形模式登录Ubuntu&#xff0c;还是命令行模式登录&#xff0c;我们会发现缺省的用户…

VSCode如何去掉Monokai主题下的绿色下划线

VScode中类似sublime的主题为Monokai&#xff0c;但是自带主题Monokai中绿色下划线令人不舒服。 在网上寻找多种方式去除下划线。终于找到一种合适的处理方式。 1 安装主题插件 在主题插件中搜索One Monokai Theme&#xff0c;下载并安装 2 配置全局主题 通过快捷键“Ctr…

nio 读取目录所有文件_在NIO.2中使用文件和目录

nio 读取目录所有文件在先前的文章中&#xff0c;我讨论了文件和目录的创建&#xff08; 创建文件和目录 &#xff09;以及选择&#xff08; 列出和过滤目录内容 &#xff09;。 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们。 这是库的一部分&#xf…

week1

文章目录找出数组中重复的数字不修改数组找出重复的数字二维数组中的查找替换空格从尾到头打印链表重建二叉树二叉树的下一个节点用两个栈实现队列斐波那契数列旋转数组的最小数字矩阵中的路径找出数组中重复的数字 https://www.acwing.com/problem/content/description/14/ …

使用反射前先三思

介绍 有时&#xff0c;作为开发人员&#xff0c;您可能会遇到无法使用new运算符实例化对象的情况&#xff0c;因为其类名存储在配置XML中的某个位置&#xff0c;或者您需要调用一个名称指定为注释属性的方法。 在这种情况下&#xff0c;您总会有一个答案&#xff1a;“使用反射…

解决 ZLibrary 登录/注册不了的问题

一 文章转载链接内容 转载链接&#xff1a;解决 ZLibrary 登录/注册不了的问题 - 知乎 很多小伙伴反馈说 Z-Library 能打开&#xff0c;但是不能登录。这实际上是由于官方登录入口受限导致的。话虽如此&#xff0c;我们仍然可以通过某些方法绕过这个限制。 >虽然我们注册时…

阿里云资源搜索网站

1. 奈斯搜索 - 资源超丰富的阿里云盘资源搜索网站&#xff01; 2. 求资源-百度网盘资源分享_云盘资源分享网_云盘资源网 3. 猫狸盘搜 - 阿里云盘搜索神器 4. 云盘资源分享_云盘网盘资源共享_云盘资源搜索_阿里云盘资源-盘友社区

gradle入门_Gradle入门:简介

gradle入门Gradle是一种构建工具&#xff0c;可以用基于Groovy编程语言的内部DSL替换基于XML的构建脚本。 最近它吸引了很多关注&#xff0c;这就是为什么我决定仔细研究一下。 这篇博客文章是我的Gradle教程的第一部分&#xff0c;它有两个目标&#xff1a; 帮助我们安装Gr…

解决Chrome窗口总保持在最前面的问题 get rid of Chrome window always-on-top behavior

今天发现Chrome的窗口总保持在最前面&#xff0c;本以为是自己不小心把“总在最前”的功能打开了呢。结果找了半天也没发现Chrome有这个设置&#xff0c;于是想到了可能是个bug。我上网搜了下&#xff0c;发现大家遇到了跟我一样的问题&#xff0c;而且有人也向google反馈了这个…

Spring MVC – HTTP消息转换器

通常&#xff0c;您需要为用户提供相同的数据&#xff0c;但格式不同&#xff0c;例如JSON&#xff0c;PDF&#xff0c;XLS等。如果您的应用程序是基于Spring Framework的&#xff0c;则可以使用HTTP消息转换器来完成此任务。 需要将HTTP请求&#xff08;或其部分&#xff09;…

C++ 链表的建立与使用

#include <iostream> using namespace std; struct ListNode {int val; //存储数据ListNode *next; //next指针ListNode(int x) : val(x), next(NULL) {} }; ListNode* creatLinkedList(int arr[],int n) {if(n 0)return NULL;ListNode* head new ListNode(arr[…

排队论游乐场的游乐项目_外汇游乐场

排队论游乐场的游乐项目介绍 F X Playground是基于JavaFX的原型制作工具或实时编辑器&#xff0c;它消除了编译Java代码的步骤。 这个概念并不新鲜&#xff0c;例如在网络世界中&#xff0c;有许多HTML5 游乐场提供在线编辑器&#xff0c;使开发人员可以快速原型化或尝试各种Ja…

Node.js安装及环境配置之Windows篇

原博文链接&#xff1a;Node.js安装及环境配置之Windows篇 - 刘奇云 - 博客园 from:https://www.cnblogs.com/zhouyu2017/p/6485265.html 一、安装环境 1、本机系统&#xff1a;Windows 10 Pro&#xff08;64位&#xff09; 2、Node.js&#xff1a;v6.9.2LTS&#xff08;64位…

Java代理初学者指南

尽管Java初学者很快学会了键入public static void main来运行他们的应用程序&#xff0c;但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支持&#xff1a; premain和agentmain方法。 这两种方法都允许所谓的Java代理在驻留在其自己的jar文件中的同时…

npm WARN logfile could not create logs-dir: Error: EPERM: operation not permitted, mkdir ‘地址

场景&#xff1a;在windows系统下&#xff0c;安装node之后&#xff0c;查看npm版本&#xff0c;报错如图所示&#xff1a; 原因&#xff1a;是node目录权限不够&#xff1b; 解决方法&#xff1a;找到node目录&#xff0c;右键属性 > 安全 > 设置users用户完全控制权限…

javafx 自定义控件_JavaFX技巧10:自定义复合控件

javafx 自定义控件用JavaFX编写自定义控件是一个简单直接的过程。 需要一个控件类来控制控件的状态&#xff08;因此命名&#xff09;。 外观需要控件的外观。 而且通常不是用于自定义外观CSS文件。 控件的一种常见方法是将其正在使用的节点隐藏在其外观类中。 例如&#xff0…

虚拟机与容器 的 区别

VM和容器都可以帮助您充分利用可用的计算机硬件和软件资源。容器是块中的新孩子&#xff0c;但VM已经并且将继续在各种规模的数据中心中非常受欢迎。 如果您正在寻找在云中运行自己的服务的最佳解决方案&#xff0c;您需要了解这些虚拟化技术&#xff0c;它们如何相互比较&…