Пример Spring 3 MVC и RSS-канала

Spring 3 MVC и пример RSS-канала

В Spring 3 поставляется абстрактный класс «AbstractRssFeedView» для создания представления RSS-канала с использованием пакета ROME от java.net. В этом руководстве мы покажем вам, как создать представление RSS-канала из среды Spring MVC.

Используемые технологии:

  1. Весна 3.0.5. ВЫПУСК

  2. РИМ 1.0.0

  3. JDK 1.6

  4. Затмение 3.6

  5. Maven 3

В конце руководства, когда вы посещаете этот URL-адрес -http://localhost:8080/SpringMVC/rest/rssfeed, браузер вернет следующее содержимое RSS-канала:



  
    Mkyong Dot Com
    http://www.example.com
    Java Tutorials and Examples
    
      Spring MVC Tutorial 1
      http://www.example.com/spring-mvc/tutorial-1
      Tutorial 1 summary ...
      Tue, 26 Jul 2011 02:26:08 GMT
    
    
      Spring MVC Tutorial 2
      http://www.example.com/spring-mvc/tutorial-2
      Tutorial 2 summary ...
      Tue, 26 Jul 2011 02:26:08 GMT
    
  

1. Структура каталогов

Просмотрите окончательную структуру проекта.

directory structure

2. Зависимости проекта

Для Maven объявляет следующие зависимости в вашемpom.xml.

    
        3.0.5.RELEASE
    

    

        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            net.java.dev.rome
            rome
            1.0.0
        

        
        
            javax.servlet
            servlet-api
            2.5
            provided
        

    

3. модель

Простой POJO, позже используйте этот объект для генерации контента RSS-канала.

package com.example.common.model;

import java.util.Date;

public class SampleContent {

    String title;
    String url;
    String summary;
    Date createdDate;

    //getter and seeter methods
}

4. AbstractRssFeedView

Создайте класс extendsAbstractRssFeedView и переопределите методыbuildFeedMetadata иbuildFeedItems, код ниже должен быть понятным.

package com.example.common.rss;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.feed.AbstractRssFeedView;
import com.example.common.model.SampleContent;
import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Item;

public class CustomRssViewer extends AbstractRssFeedView {

    @Override
    protected void buildFeedMetadata(Map model, Channel feed,
        HttpServletRequest request) {

        feed.setTitle("Mkyong Dot Com");
        feed.setDescription("Java Tutorials and Examples");
        feed.setLink("http://www.example.com");

        super.buildFeedMetadata(model, feed, request);
    }


    @Override
    protected List buildFeedItems(Map model,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

        @SuppressWarnings("unchecked")
        List listContent = (List) model.get("feedContent");
        List items = new ArrayList(listContent.size());

        for(SampleContent tempContent : listContent ){

            Item item = new Item();

            Content content = new Content();
            content.setValue(tempContent.getSummary());
            item.setContent(content);

            item.setTitle(tempContent.getTitle());
            item.setLink(tempContent.getUrl());
            item.setPubDate(tempContent.getCreatedDate());

            items.add(item);
        }

        return items;
    }

}

5. контроллер

Класс контроллера Spring MVC, сгенерируйте содержимое RSS-канала и верните имя представления «rssViewer» (это имя представления относится к вышеупомянутому «CustomRssViewer», будет зарегистрировано на шаге 6 позже).

package com.example.common.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.example.common.model.SampleContent;

@Controller
public class RssController {

    @RequestMapping(value="/rssfeed", method = RequestMethod.GET)
    public ModelAndView getFeedInRss() {

        List items = new ArrayList();

        SampleContent content  = new SampleContent();
        content.setTitle("Spring MVC Tutorial 1");
        content.setUrl("http://www.example.com/spring-mvc/tutorial-1");
        content.setSummary("Tutorial 1 summary ...");
        content.setCreatedDate(new Date());
        items.add(content);

        SampleContent content2  = new SampleContent();
        content2.setTitle("Spring MVC Tutorial 2");
        content2.setUrl("http://www.example.com/spring-mvc/tutorial-2");
        content2.setSummary("Tutorial 2 summary ...");
        content2.setCreatedDate(new Date());
        items.add(content2);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("rssViewer");
        mav.addObject("feedContent", items);

        return mav;

    }

}

6. Регистрация бобов весной

В файле определения bean-компонента Spring включите автоматическое сканирование компонентов и зарегистрируйте свой класс «CustomRssViewer» и преобразователь представлений «BeanNameViewResolver», чтобы при возврате имени представления «rssViewer», Spring знает, что он должен отображаться на идентификатор bean-компонента «rssViewer».

Файл: mvc-dispatcher-servlet.xml



    

    
    

    

Note
Содержимое файлаweb.xml опущено, просто стандартная конфигурация, если вам интересно, скачайте весь этот проект в конце статьи.

7. Demo

spring mvc and rss feed demo

How about Atom?
Для Atom вам просто нужно расширитьAbstractAtomFeedView вместоAbstractRssFeedView.

Скачать исходный код

Скачать -SpringMVC-RSS-Feed-Example.zip (9 КБ)