org.springframework.web.servlet.mvc
Class ServletForwardingController
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
- All Implemented Interfaces:
- BeanNameAware, ApplicationContextAware, Controller
public class ServletForwardingController
- extends AbstractController
- implements BeanNameAware
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 Servlet 2.2 container that does not support Servlet filters.
In particular, the main intent of this controller is to allow for applying
Spring's OpenSessionInViewInterceptor or OpenPersistenceManagerInViewInterceptor
to servlets in a Servlet 2.2 container. The specified "servlet-name" will
simply refer to a custom servlet definition in web.xml in such a scenario.
You then need to map "/myservlet" (or whatever path you choose for your servlet)
onto this controller, which will in turn forward to your servlet.
In a Servlet 2.3 container, when not using Spring's own web MVC framework,
it is recommended to use classic servlet mapping in combination with a filter,
for example Spring's OpenSessionInViewFilter or OpenPersistenceManagerInViewFilter.
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>
- Since:
- 1.1.1
- Author:
- Juergen Hoeller
- See Also:
ServletWrappingController
,
OpenSessionInViewInterceptor
,
OpenSessionInViewFilter
,
OpenPersistenceManagerInViewInterceptor
,
OpenPersistenceManagerInViewFilter
Methods inherited from class org.springframework.web.servlet.support.WebContentGenerator |
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseExpiresHeader |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ServletForwardingController
public ServletForwardingController()
setServletName
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.
setBeanName
public void setBeanName(String name)
- Description copied from interface:
BeanNameAware
- 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 like InitializingBean's afterPropertiesSet or a custom init-method.
- Specified by:
setBeanName
in interface BeanNameAware
- Parameters:
name
- the name of the bean in the factory
handleRequestInternal
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response)
throws Exception
- Description copied from class:
AbstractController
- Template method. Subclasses must implement this.
The contract is the same as for
handleRequest
.
- Specified by:
handleRequestInternal
in class AbstractController
- Throws:
Exception
- See Also:
AbstractController.handleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
Copyright (c) 2002-2007 The Spring Framework Project.