日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時間:2023/12/3 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在這篇文章中,我將展示一些創(chuàng)建Spring Web應(yīng)用程序的準(zhǔn)則,使用Jetty以及使用名為ROME的外部庫運行RSS來運行它。

一般

我最近創(chuàng)建了一個示例Web應(yīng)用程序,充當(dāng)RSS閱讀器。 我想檢查ROME以閱讀RSS。 我還想使用Spring容器和MVC創(chuàng)建最簡單的視圖的應(yīng)用程序。 為了快速開發(fā),我將Jetty用作服務(wù)器,并為其使用了一個簡單的java類。
所有代碼都可以在GitHub,eyalgo / rss-reader上找到 。

內(nèi)容

  • Maven依賴
  • 碼頭服務(wù)器
  • Spring依賴
  • SpringMVC
  • 羅馬
  • Maven依賴

    起初,我無法使用正確的Jetty版本。 有一個帶有g(shù)roup-id mortby,另一個帶有eclipse。 經(jīng)過一番仔細(xì)的檢查和反復(fù)試驗,我拿下了日食的圖書館。 春天只是標(biāo)準(zhǔn)。 我在GutHub下找到了最新版本的ROME。 它仍然是快照。

    這是依賴項列表:

    • 彈簧
    • 碼頭
    • 羅馬和羅馬取球器
    • 登錄和slf4j
    • 用于檢測
      • 朱尼特
    • 該項目的pom文件可以在以下位置找到: https : //github.com/eyalgo/rss-reader/blob/master/pom.xml

    碼頭服務(wù)器

    幾年前,我一直在使用Wicket框架,并且了解Jetty及其易于使用的服務(wù)器創(chuàng)建方法。 我決定朝這個方向前進(jìn),并跳過運行WAR部署的標(biāo)準(zhǔn)Web服務(wù)器。

    有幾種創(chuàng)建Jetty服務(wù)器的方法。 我決定使用Web應(yīng)用程序上下文創(chuàng)建服務(wù)器。

    首先,創(chuàng)建上下文:

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

    然后,創(chuàng)建服務(wù)器并將上下文添加為處理程序:

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

    最后,啟動服務(wù)器:

    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項目結(jié)構(gòu)

    RSS閱讀器項目結(jié)構(gòu)

    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,它是一個外部類,因此無法對其進(jìn)行掃描(使用注釋):
    <bean id="fetcher" class="org.rometools.fetcher.impl.HttpURLFeedFetcher"/> 。

    除了掃描之外,我還在正確的類中添加了正確的注釋。
    @Repository
    @Service
    @Autowired

    SpringMVC

    為了對RSS提要(和原子)有一些基本的了解,我使用了一個簡單的MVC和JSP頁面。 要創(chuàng)建控制器,我需要為該類添加@Controller 。 我添加了@RequestMapping("/rss")因此所有請求都應(yīng)以rss為前綴。 每個方法都有一個@RequestMapping聲明。 我認(rèn)為一切都是GET 。

    向請求添加參數(shù)

    只需在方法的參數(shù)之前添加@RequestParam("feedUrl") 。

    重定向請求

    添加RSS位置后,我想重定向答案以顯示所有當(dāng)前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中,當(dāng)方法返回String時,框架將查找具有該名稱的JSP頁面。 如果沒有,那么我們會得到一個錯誤。 (如果只想返回String,則可以在方法中添加@ResponseBody 。)

    為了使用ModelAndView ,您需要創(chuàng)建一個名稱為: 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中具有以下內(nèi)容 :

    <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 。 通過設(shè)置前綴,這個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添加到要處理錯誤的類。 其次,針對要捕獲的異常類型創(chuàng)建一個方法。 您需要使用@ExceptionHandler注釋該方法。 參數(shù)告訴此方法將處理哪個異常。 您可以為IllegalArgumentException提供一個方法,為不同的異常提供另一個方法,依此類推。 返回值可以是任何值,它將用作常規(guī)控制器。 這意味著,例如,使用一個帶有該方法返回的對象名稱的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。

    有關(guān)如何讀取輸入的RSS XML文件的示例,可以在以下網(wǎng)址找到: https : //github.com/eyalgo/rss-reader/blob/master/src/test/java/com/eyalgo/rssreader/runners/MetadataFeedRunner。Java

    為了讓生活更輕松,我使用了羅馬提取器。 它使您能夠提供URL(RSS提要)并排除所有SyndFeed 。 如果需要,您可以添加緩存,這樣它就不會下載緩存的項目(已下載的項目)。 您所需要做的就是在構(gòu)造函數(shù)中使用FeedFetcherCache參數(shù)創(chuàng)建訪存器。

    用法:

    @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

    總結(jié)

    以上是生活随笔為你收集整理的RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。