javascript
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上找到 。
內容
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK 14:记录,文本块等
- 下一篇: 牲畜备案卡怎么办理(牲畜备案卡)