public class

ServletForwardingController

extends AbstractController
implements BeanNameAware
java.lang.Object
   ↳ org.springframework.context.support.ApplicationObjectSupport
     ↳ org.springframework.web.context.support.WebApplicationObjectSupport
       ↳ org.springframework.web.servlet.support.WebContentGenerator
         ↳ org.springframework.web.servlet.mvc.AbstractController
           ↳ org.springframework.web.servlet.mvc.ServletForwardingController

Class Overview

Spring Controller implementation that forwards to a named servlet, i.e. the "servlet-name" in web.xml rather than a URL path mapping. A target servlet doesn't even need a "servlet-mapping" in web.xml in the first place: A "servlet" declaration is sufficient.

Useful to invoke an existing servlet via Spring's dispatching infrastructure, for example to apply Spring HandlerInterceptors to its requests. This will work even in a minimal Servlet container that does not support Servlet filters.

Example: web.xml, mapping all "/myservlet" requests to a Spring dispatcher. Also defines a custom "myServlet", but without servlet mapping.

 <servlet>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>mypackage.TestServlet</servlet-class>
 </servlet>

 <servlet>
   <servlet-name>myDispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 </servlet>

 <servlet-mapping>
   <servlet-name>myDispatcher</servlet-name>
   <url-pattern>/myservlet</url-pattern>
 </servlet-mapping>
Example: myDispatcher-servlet.xml, in turn forwarding "/myservlet" to your servlet (identified by servlet name). All such requests will go through the configured HandlerInterceptor chain (e.g. an OpenSessionInViewInterceptor). From the servlet point of view, everything will work as usual.
 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="interceptors">
     <list>
       <ref bean="openSessionInViewInterceptor"/>
     </list>
   </property>
   <property name="mappings">
     <props>
       <prop key="/myservlet">myServletForwardingController</prop>
     </props>
   </property>
 </bean>

 <bean id="myServletForwardingController" class="org.springframework.web.servlet.mvc.ServletForwardingController">
   <property name="servletName"><value>myServlet</value></property>
 </bean>

Summary

[Expand]
Inherited Constants
From class org.springframework.web.servlet.support.WebContentGenerator
[Expand]
Inherited Fields
From class org.springframework.context.support.ApplicationObjectSupport
Public Constructors
ServletForwardingController()
Public Methods
void setBeanName(String name)
Set the name of the bean in the bean factory that created this bean.
void setServletName(String servletName)
Set the name of the servlet to forward to, i.e.
Protected Methods
ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
Template method.
boolean useInclude(HttpServletRequest request, HttpServletResponse response)
Determine whether to use RequestDispatcher's include or forward method.
[Expand]
Inherited Methods
From class org.springframework.web.servlet.mvc.AbstractController
From class org.springframework.web.servlet.support.WebContentGenerator
From class org.springframework.web.context.support.WebApplicationObjectSupport
From class org.springframework.context.support.ApplicationObjectSupport
From class java.lang.Object
From interface org.springframework.beans.factory.BeanNameAware
From interface org.springframework.context.ApplicationContextAware
From interface org.springframework.web.context.ServletContextAware
From interface org.springframework.web.servlet.mvc.Controller

Public Constructors

public ServletForwardingController ()

Public Methods

public void setBeanName (String name)

Set the name of the bean in the bean factory that created this bean.

Invoked after population of normal bean properties but before an init callback such as afterPropertiesSet() or a custom init-method.

Parameters
name the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the BeanFactoryUtils#originalBeanName(String) method to extract the original bean name (without suffix), if desired.

public void setServletName (String servletName)

Set the name of the servlet to forward to, i.e. the "servlet-name" of the target servlet in web.xml.

Default is the bean name of this controller.

Protected Methods

protected ModelAndView handleRequestInternal (HttpServletRequest request, HttpServletResponse response)

Template method. Subclasses must implement this. The contract is the same as for handleRequest.

Throws
Exception

protected boolean useInclude (HttpServletRequest request, HttpServletResponse response)

Determine whether to use RequestDispatcher's include or forward method.

Performs a check whether an include URI attribute is found in the request, indicating an include request, and whether the response has already been committed. In both cases, an include will be performed, as a forward is not possible anymore.

Parameters
request current HTTP request
response current HTTP response
Returns
  • true for include, false for forward