Configure the view resolver for your RSS feed

The last thing we need to take care of is configuring up the right view resolver in our application context. We can't use the standard InternalResourceViewResolver here because we're not mapping to a URL; instead we want to map to a view (namely, the RssNewsFeedView that we just created) and we want that view to handle generating the output directly.

The simplest approach here is to use something called the BeanNameViewResolver. The idea with this type of resolver is quite simple. Whenever a controller returns a logical view name, the BeanNameViewResolver will attempt to find a bean on the application context with the same name (or ID). If there's a match, then it interprets that bean as the mapped view. Otherwise, the other resolvers are given their shot at matching the view name.

To add a BeanNameViewResolver, all we need to add is this:

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>

We also need to inject the view name into our controller, as we saw in listing 1. Here's how we can do that:

<bean class="rssdemo.web.NewsController"
    p:newsService-ref="newsService"
    p:rssNewsFeedView="rssNewsFeedView"/>

We just chose the name rssNewsFeedView more or less arbitrarily; we could have chosen anything. It's good to choose something accurate and descriptive just to keep things clear and the minimize the chance of a mapping conflict, since the name you choose is going to be a bean name. Speaking of which, we'll need to put our view on the app context too:

<bean id="rssNewsFeedView"
    class="rssdemo.web.RssNewsFeedView"
    p:feedTitle="Ye Olde Cigar Shoppe"
    p:feedDescription="Latest and greatest news about cigars"
    p:feedLink="http://yeoldecigarshoppe.com/"/>

And there you have it! When the DispatcherServlet gets a request for the RSS feed, it will run the controller method and then grab the resulting view name, which we've configured to be rssNewsFeedView. Then the BeanNameViewResolver will find the corresponding view bean on the app context—in this case our RssNewsFeedView—and the view bean will finish up the request as required. All in all a nice, clean way of handling feed publication.