类 DispatcherPortlet
- java.lang.Object
- javax.portlet.GenericPortlet
- org.springframework.web.portlet.GenericPortletBean
- org.springframework.web.portlet.FrameworkPortlet
- org.springframework.web.portlet.DispatcherPortlet
- 所有已实现的接口:
EventListener
,EventPortlet
,Portlet
,PortletConfig
,ResourceServingPortlet
,Aware
,ApplicationListener<ContextRefreshedEvent>
,EnvironmentAware
,EnvironmentCapable
public class DispatcherPortlet extends FrameworkPortlet
Central dispatcher for use within the Portlet MVC framework, e.g. for web UI controllers. Dispatches to registered handlers for processing a portlet request.This portlet is very flexible: It can be used with just about any workflow, with the installation of the appropriate adapter classes. It offers the following functionality that distinguishes it from other request-driven Portlet MVC frameworks:
- It is based around a JavaBeans configuration mechanism.
- It can use any
HandlerMapping
implementation - pre-built or provided as part of an application - to control the routing of requests to handler objects. Default is aDefaultAnnotationHandlerMapping
. HandlerMapping objects can be defined as beans in the portlet's application context, implementing the HandlerMapping interface, overriding the default HandlerMapping if present. HandlerMappings can be given any bean name (they are tested by type). - It can use any
HandlerAdapter
; this allows for using any handler interface. The default adapter isSimpleControllerHandlerAdapter
for Spring'sController
interface. A defaultAnnotationMethodHandlerAdapter
will be registered as well. HandlerAdapter objects can be added as beans in the application context, overriding the default HandlerAdapter. Like HandlerMappings, HandlerAdapters can be given any bean name (they are tested by type). - The dispatcher's exception resolution strategy can be specified via a
HandlerExceptionResolver
, for example mapping certain exceptions to error pages. Default is none. Additional HandlerExceptionResolvers can be added through the application context. HandlerExceptionResolver can be given any bean name (they are tested by type). - Its view resolution strategy can be specified via a
ViewResolver
implementation, resolving symbolic view names into View objects. Default isInternalResourceViewResolver
. ViewResolver objects can be added as beans in the application context, overriding the default ViewResolver. ViewResolvers can be given any bean name (they are tested by type). - The dispatcher's strategy for resolving multipart requests is determined by a
PortletMultipartResolver
implementation. An implementations for Apache Commons FileUpload is included:CommonsPortletMultipartResolver
. The MultipartResolver bean name is "portletMultipartResolver"; default is none.
NOTE: The
@RequestMapping
annotation will only be processed if a correspondingHandlerMapping
(for type-level annotations) and/orHandlerAdapter
(for method-level annotations) is present in the dispatcher. This is the case by default. However, if you are defining customHandlerMappings
orHandlerAdapters
, then you need to make sure that a corresponding customDefaultAnnotationHandlerMapping
and/orAnnotationMethodHandlerAdapter
is defined as well - provided that you intend to use@RequestMapping
.A web application can define any number of DispatcherPortlets. Each portlet will operate in its own namespace, loading its own application context with mappings, handlers, etc. Only the root application context as loaded by
ContextLoaderListener
, if any, will be shared.Thanks to Rainer Schmitz, Nick Lothian and Eric Dalquist for their suggestions!
- 从以下版本开始:
- 2.0
- 作者:
- William G. Thompson, Jr., John A. Lewis, Juergen Hoeller
- 另请参阅:
Controller
,ViewRendererServlet
,ContextLoaderListener
字段概要
字段 修饰符和类型 字段 说明 static String
ACTION_EXCEPTION_RENDER_PARAMETER
This render parameter is used to indicate forward to the render phase that an exception occurred during the action phase.static String
ACTION_EXCEPTION_SESSION_ATTRIBUTE
Unlike the Servlet version of this class, we have to deal with the two-phase nature of the portlet request.static String
DEFAULT_VIEW_RENDERER_URL
Default URL to ViewRendererServlet.static String
HANDLER_ADAPTER_BEAN_NAME
Well-known name for the HandlerAdapter object in the bean factory for this namespace.static String
HANDLER_EXCEPTION_RESOLVER_BEAN_NAME
Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace.static String
HANDLER_MAPPING_BEAN_NAME
Well-known name for the HandlerMapping object in the bean factory for this namespace.static String
MULTIPART_RESOLVER_BEAN_NAME
Well-known name for the PortletMultipartResolver object in the bean factory for this namespace.static String
PAGE_NOT_FOUND_LOG_CATEGORY
Log category to use when no mapped handler is found for a request.protected static Log
pageNotFoundLogger
Additional logger to use when no mapped handler is found for a request.static String
VIEW_RESOLVER_BEAN_NAME
Well-known name for the ViewResolver object in the bean factory for this namespace.从类继承的字段 org.springframework.web.portlet.FrameworkPortlet
DEFAULT_CONTEXT_CLASS, DEFAULT_NAMESPACE_SUFFIX, DEFAULT_USERINFO_ATTRIBUTE_NAMES, PORTLET_CONTEXT_PREFIX
从类继承的字段 org.springframework.web.portlet.GenericPortletBean
logger
构造器概要
构造器 构造器 说明 DispatcherPortlet()
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 protected ActionRequest
checkMultipart(ActionRequest request)
Convert the request into a multipart request, and make multipart resolver available.protected Object
createDefaultStrategy(ApplicationContext context, Class<?> clazz)
Create a default strategy.protected void
doActionService(ActionRequest request, ActionResponse response)
Processes the actual dispatching to the handler for action requests.protected void
doDispatch(PortletRequestDispatcher dispatcher, PortletRequest request, MimeResponse response)
Perform a dispatch on the given PortletRequestDispatcher.protected void
doEventService(EventRequest request, EventResponse response)
Processes the actual dispatching to the handler for event requests.protected void
doRender(View view, Map<String,?> model, PortletRequest request, MimeResponse response)
Actually render the given view.protected void
doRenderService(RenderRequest request, RenderResponse response)
Processes the actual dispatching to the handler for render requests.protected void
doResourceService(ResourceRequest request, ResourceResponse response)
Processes the actual dispatching to the handler for resource requests.protected void
exposeActionException(PortletRequest request, StateAwareResponse response, Exception ex)
Expose the given action exception to the given response.protected <T> List<T>
getDefaultStrategies(ApplicationContext context, Class<T> strategyInterface)
Create a List of default strategy objects for the given strategy interface.protected <T> T
getDefaultStrategy(ApplicationContext context, Class<T> strategyInterface)
Return the default strategy object for the given strategy interface.protected HandlerExecutionChain
getHandler(PortletRequest request)
Return the HandlerExecutionChain for this request.protected HandlerAdapter
getHandlerAdapter(Object handler)
Return the HandlerAdapter for this handler object.PortletMultipartResolver
getMultipartResolver()
Obtain this portlet's PortletMultipartResolver, if any.protected void
initStrategies(ApplicationContext context)
Refresh the strategy objects that this portlet uses.protected void
noHandlerFound(PortletRequest request, PortletResponse response)
No handler found -> throw appropriate exception.void
onRefresh(ApplicationContext context)
This implementation callsinitStrategies(org.springframework.context.ApplicationContext)
.protected ModelAndView
processHandlerException(RenderRequest request, RenderResponse response, Object handler, Exception ex)
Determine an error ModelAndView via the registered HandlerExceptionResolvers.protected ModelAndView
processHandlerException(ResourceRequest request, ResourceResponse response, Object handler, Exception ex)
Determine an error ModelAndView via the registered HandlerExceptionResolvers.protected void
render(ModelAndView mv, PortletRequest request, MimeResponse response)
Render the given ModelAndView.protected View
resolveViewName(String viewName, Map<String,?> model, PortletRequest request)
Resolve the given view name into a View object (to be rendered).void
setDetectAllHandlerAdapters(boolean detectAllHandlerAdapters)
Set whether to detect all HandlerAdapter beans in this portlet's context.void
setDetectAllHandlerExceptionResolvers(boolean detectAllHandlerExceptionResolvers)
Set whether to detect all HandlerExceptionResolver beans in this portlet's context.void
setDetectAllHandlerMappings(boolean detectAllHandlerMappings)
Set whether to detect all HandlerMapping beans in this portlet's context.void
setDetectAllViewResolvers(boolean detectAllViewResolvers)
Set whether to detect all ViewResolver beans in this portlet's context.void
setForwardActionException(boolean forwardActionException)
Set whether to forward exceptions thrown during the action phase to the render phase via a session attribute.void
setForwardEventException(boolean forwardEventException)
Set whether to forward exceptions thrown during the event phase to the render phase via a session attribute.void
setViewRendererUrl(String viewRendererUrl)
Set the URL to the ViewRendererServlet.从类继承的方法 org.springframework.web.portlet.FrameworkPortlet
buildLocaleContext, createPortletApplicationContext, destroy, doDispatch, getContextClass, getContextConfigLocation, getNamespace, getPortletApplicationContext, getPortletContextAttributeName, getTitle, getUsernameForRequest, initFrameworkPortlet, initPortletApplicationContext, initPortletBean, onApplicationEvent, postProcessPortletApplicationContext, processAction, processEvent, processRequest, refresh, serveResource, setContextClass, setContextConfigLocation, setNamespace, setPublishContext, setPublishEvents, setThreadContextInheritable, setUserinfoUsernameAttributes
从类继承的方法 org.springframework.web.portlet.GenericPortletBean
addRequiredProperty, createEnvironment, getEnvironment, getPortletContext, getPortletName, init, initBeanWrapper, setEnvironment
从类继承的方法 javax.portlet.GenericPortlet
doEdit, doHeaders, doHelp, doView, getContainerRuntimeOptions, getDefaultNamespace, getInitParameter, getInitParameterNames, getNextPossiblePortletModes, getPortletConfig, getProcessingEventQNames, getPublicRenderParameterNames, getPublishingEventQNames, getResourceBundle, getSupportedLocales, init, render
字段详细资料
MULTIPART_RESOLVER_BEAN_NAME
public static final String MULTIPART_RESOLVER_BEAN_NAME
Well-known name for the PortletMultipartResolver object in the bean factory for this namespace.- 另请参阅:
- 常量字段值
HANDLER_MAPPING_BEAN_NAME
public static final String HANDLER_MAPPING_BEAN_NAME
Well-known name for the HandlerMapping object in the bean factory for this namespace. Only used when "detectAllHandlerMappings" is turned off.
HANDLER_ADAPTER_BEAN_NAME
public static final String HANDLER_ADAPTER_BEAN_NAME
Well-known name for the HandlerAdapter object in the bean factory for this namespace. Only used when "detectAllHandlerAdapters" is turned off.
HANDLER_EXCEPTION_RESOLVER_BEAN_NAME
public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME
Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace. Only used when "detectAllHandlerExceptionResolvers" is turned off.
VIEW_RESOLVER_BEAN_NAME
public static final String VIEW_RESOLVER_BEAN_NAME
Well-known name for the ViewResolver object in the bean factory for this namespace.- 另请参阅:
- 常量字段值
DEFAULT_VIEW_RENDERER_URL
public static final String DEFAULT_VIEW_RENDERER_URL
Default URL to ViewRendererServlet. This bridge servlet is used to convert portlet render requests to servlet requests in order to leverage the view support in theorg.springframework.web.view
package.- 另请参阅:
- 常量字段值
ACTION_EXCEPTION_SESSION_ATTRIBUTE
public static final String ACTION_EXCEPTION_SESSION_ATTRIBUTE
Unlike the Servlet version of this class, we have to deal with the two-phase nature of the portlet request. To do this, we need to pass forward any exception that occurs during the action phase, so that it can be displayed in the render phase. The only direct way to pass things forward and preserve them for each render request is through render parameters, but these are limited to String objects and we need to pass the Exception itself. The only other way to do this is in the session. The bad thing about using the session is that we have no way of knowing when we are done re-rendering the request and so we don't know when we can remove the objects from the session. So we will end up polluting the session with an old exception when we finally leave the render phase of one request and move on to something else.
ACTION_EXCEPTION_RENDER_PARAMETER
public static final String ACTION_EXCEPTION_RENDER_PARAMETER
This render parameter is used to indicate forward to the render phase that an exception occurred during the action phase.- 另请参阅:
- 常量字段值
PAGE_NOT_FOUND_LOG_CATEGORY
public static final String PAGE_NOT_FOUND_LOG_CATEGORY
Log category to use when no mapped handler is found for a request.- 另请参阅:
- 常量字段值
pageNotFoundLogger
protected static final Log pageNotFoundLogger
Additional logger to use when no mapped handler is found for a request.
构造器详细资料
DispatcherPortlet
public DispatcherPortlet()
方法详细资料
setDetectAllHandlerMappings
public void setDetectAllHandlerMappings(boolean detectAllHandlerMappings)
Set whether to detect all HandlerMapping beans in this portlet's context. Else, just a single bean with name "handlerMapping" will be expected.Default is true. Turn this off if you want this portlet to use a single HandlerMapping, despite multiple HandlerMapping beans being defined in the context.
setDetectAllHandlerAdapters
public void setDetectAllHandlerAdapters(boolean detectAllHandlerAdapters)
Set whether to detect all HandlerAdapter beans in this portlet's context. Else, just a single bean with name "handlerAdapter" will be expected.Default is "true". Turn this off if you want this portlet to use a single HandlerAdapter, despite multiple HandlerAdapter beans being defined in the context.
setDetectAllHandlerExceptionResolvers
public void setDetectAllHandlerExceptionResolvers(boolean detectAllHandlerExceptionResolvers)
Set whether to detect all HandlerExceptionResolver beans in this portlet's context. Else, just a single bean with name "handlerExceptionResolver" will be expected.Default is true. Turn this off if you want this portlet to use a single HandlerExceptionResolver, despite multiple HandlerExceptionResolver beans being defined in the context.
setDetectAllViewResolvers
public void setDetectAllViewResolvers(boolean detectAllViewResolvers)
Set whether to detect all ViewResolver beans in this portlet's context. Else, just a single bean with name "viewResolver" will be expected.Default is true. Turn this off if you want this portlet to use a single ViewResolver, despite multiple ViewResolver beans being defined in the context.
setForwardActionException
public void setForwardActionException(boolean forwardActionException)
Set whether to forward exceptions thrown during the action phase to the render phase via a session attribute.Default is true. Turn this off if you want the portlet container to provide immediate exception handling for action requests.
setForwardEventException
public void setForwardEventException(boolean forwardEventException)
Set whether to forward exceptions thrown during the event phase to the render phase via a session attribute.Default is false. Turn this on if you want the
DispatcherPortlet
to forward the exception to the render phase, similar to what it does foraction exceptions
by default.
setViewRendererUrl
public void setViewRendererUrl(String viewRendererUrl)
Set the URL to the ViewRendererServlet. That servlet is used to ultimately render all views in the portlet application.
onRefresh
public void onRefresh(ApplicationContext context)
This implementation callsinitStrategies(org.springframework.context.ApplicationContext)
.- 覆盖:
onRefresh
在类中FrameworkPortlet
- 参数:
context
- the current Portlet ApplicationContext- 另请参阅:
FrameworkPortlet.refresh()
initStrategies
protected void initStrategies(ApplicationContext context)
Refresh the strategy objects that this portlet uses.May be overridden in subclasses in order to initialize further strategy objects.
getDefaultStrategy
protected <T> T getDefaultStrategy(ApplicationContext context, Class<T> strategyInterface)
Return the default strategy object for the given strategy interface.The default implementation delegates to
getDefaultStrategies(org.springframework.context.ApplicationContext, java.lang.Class<T>)
, expecting a single object in the list.- 参数:
context
- the current Portlet ApplicationContextstrategyInterface
- the strategy interface- 返回:
- the corresponding strategy object
- 另请参阅:
getDefaultStrategies(org.springframework.context.ApplicationContext, java.lang.Class<T>)
getDefaultStrategies
protected <T> List<T> getDefaultStrategies(ApplicationContext context, Class<T> strategyInterface)
Create a List of default strategy objects for the given strategy interface.The default implementation uses the "DispatcherPortlet.properties" file (in the same package as the DispatcherPortlet class) to determine the class names. It instantiates the strategy objects and satisifies ApplicationContextAware if necessary.
- 参数:
context
- the current Portlet ApplicationContextstrategyInterface
- the strategy interface- 返回:
- the List of corresponding strategy objects
createDefaultStrategy
protected Object createDefaultStrategy(ApplicationContext context, Class<?> clazz)
Create a default strategy.The default implementation uses
AutowireCapableBeanFactory.createBean(java.lang.Class<T>)
.- 参数:
context
- the current Portlet ApplicationContextclazz
- the strategy implementation class to instantiate- 返回:
- the fully configured strategy instance
- 另请参阅:
ApplicationContext.getAutowireCapableBeanFactory()
getMultipartResolver
public PortletMultipartResolver getMultipartResolver()
Obtain this portlet's PortletMultipartResolver, if any.- 返回:
- the PortletMultipartResolver used by this portlet, or
null
if none (indicating that no multipart support is available)
doActionService
protected void doActionService(ActionRequest request, ActionResponse response) throws Exception
Processes the actual dispatching to the handler for action requests.The handler will be obtained by applying the portlet's HandlerMappings in order. The HandlerAdapter will be obtained by querying the portlet's installed HandlerAdapters to find the first that supports the handler class.
- 指定者:
doActionService
在类中FrameworkPortlet
- 参数:
request
- current portlet action requestresponse
- current portlet Action response- 抛出:
Exception
- in case of any kind of processing failure- 另请参阅:
GenericPortlet.processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)
doRenderService
protected void doRenderService(RenderRequest request, RenderResponse response) throws Exception
Processes the actual dispatching to the handler for render requests.The handler will be obtained by applying the portlet's HandlerMappings in order. The HandlerAdapter will be obtained by querying the portlet's installed HandlerAdapters to find the first that supports the handler class.
- 指定者:
doRenderService
在类中FrameworkPortlet
- 参数:
request
- current portlet render requestresponse
- current portlet render response- 抛出:
Exception
- in case of any kind of processing failure- 另请参阅:
GenericPortlet.doDispatch(javax.portlet.RenderRequest, javax.portlet.RenderResponse)
doResourceService
protected void doResourceService(ResourceRequest request, ResourceResponse response) throws Exception
Processes the actual dispatching to the handler for resource requests.The handler will be obtained by applying the portlet's HandlerMappings in order. The HandlerAdapter will be obtained by querying the portlet's installed HandlerAdapters to find the first that supports the handler class.
- 指定者:
doResourceService
在类中FrameworkPortlet
- 参数:
request
- current portlet render requestresponse
- current portlet render response- 抛出:
Exception
- in case of any kind of processing failure- 另请参阅:
GenericPortlet.serveResource(javax.portlet.ResourceRequest, javax.portlet.ResourceResponse)
doEventService
protected void doEventService(EventRequest request, EventResponse response) throws Exception
Processes the actual dispatching to the handler for event requests.The handler will be obtained by applying the portlet's HandlerMappings in order. The HandlerAdapter will be obtained by querying the portlet's installed HandlerAdapters to find the first that supports the handler class.
- 指定者:
doEventService
在类中FrameworkPortlet
- 参数:
request
- current portlet action requestresponse
- current portlet Action response- 抛出:
Exception
- in case of any kind of processing failure- 另请参阅:
GenericPortlet.processEvent(javax.portlet.EventRequest, javax.portlet.EventResponse)
checkMultipart
protected ActionRequest checkMultipart(ActionRequest request) throws MultipartException
Convert the request into a multipart request, and make multipart resolver available. If no multipart resolver is set, simply use the existing request.- 参数:
request
- current HTTP request- 返回:
- the processed request (multipart wrapper if necessary)
- 抛出:
MultipartException
getHandler
protected HandlerExecutionChain getHandler(PortletRequest request) throws Exception
Return the HandlerExecutionChain for this request. Try all handler mappings in order.- 参数:
request
- current portlet request- 返回:
- the HandlerExecutionChain, or null if no handler could be found
- 抛出:
Exception
noHandlerFound
protected void noHandlerFound(PortletRequest request, PortletResponse response) throws Exception
No handler found -> throw appropriate exception.- 参数:
request
- current portlet requestresponse
- current portlet response- 抛出:
Exception
- if preparing the response failed
getHandlerAdapter
protected HandlerAdapter getHandlerAdapter(Object handler) throws PortletException
Return the HandlerAdapter for this handler object.- 参数:
handler
- the handler object to find an adapter for- 抛出:
PortletException
- if no HandlerAdapter can be found for the handler. This is a fatal error.
exposeActionException
protected void exposeActionException(PortletRequest request, StateAwareResponse response, Exception ex)
Expose the given action exception to the given response.- 参数:
request
- current portlet requestresponse
- current portlet responseex
- the action exception (may also come from an event phase)
render
protected void render(ModelAndView mv, PortletRequest request, MimeResponse response) throws Exception
Render the given ModelAndView. This is the last stage in handling a request. It may involve resolving the view by name.- 参数:
mv
- the ModelAndView to renderrequest
- current portlet render requestresponse
- current portlet render response- 抛出:
Exception
- if there's a problem rendering the view
resolveViewName
protected View resolveViewName(String viewName, Map<String,?> model, PortletRequest request) throws Exception
Resolve the given view name into a View object (to be rendered).Default implementations asks all ViewResolvers of this dispatcher. Can be overridden for custom resolution strategies, potentially based on specific model attributes or request parameters.
- 参数:
viewName
- the name of the view to resolvemodel
- the model to be passed to the viewrequest
- current portlet render request- 返回:
- the View object, or null if none found
- 抛出:
Exception
- if the view cannot be resolved (typically in case of problems creating an actual View object)- 另请参阅:
ViewResolver.resolveViewName(java.lang.String, java.util.Locale)
doRender
protected void doRender(View view, Map<String,?> model, PortletRequest request, MimeResponse response) throws Exception
Actually render the given view.The default implementation delegates to
ViewRendererServlet
.- 参数:
view
- the View to rendermodel
- the associated modelrequest
- current portlet render/resource requestresponse
- current portlet render/resource response- 抛出:
Exception
- if there's a problem rendering the view
doDispatch
protected void doDispatch(PortletRequestDispatcher dispatcher, PortletRequest request, MimeResponse response) throws Exception
Perform a dispatch on the given PortletRequestDispatcher.The default implementation uses a forward for resource requests and an include for render requests.
- 参数:
dispatcher
- the PortletRequestDispatcher to userequest
- current portlet render/resource requestresponse
- current portlet render/resource response- 抛出:
Exception
- if there's a problem performing the dispatch
processHandlerException
protected ModelAndView processHandlerException(RenderRequest request, RenderResponse response, Object handler, Exception ex) throws Exception
Determine an error ModelAndView via the registered HandlerExceptionResolvers.- 参数:
request
- current portlet requestresponse
- current portlet responsehandler
- the executed handler, or null if none chosen at the time of the exception (for example, if multipart resolution failed)ex
- the exception that got thrown during handler execution- 返回:
- a corresponding ModelAndView to forward to
- 抛出:
Exception
- if no error ModelAndView found
processHandlerException
protected ModelAndView processHandlerException(ResourceRequest request, ResourceResponse response, Object handler, Exception ex) throws Exception
Determine an error ModelAndView via the registered HandlerExceptionResolvers.- 参数:
request
- current portlet requestresponse
- current portlet responsehandler
- the executed handler, or null if none chosen at the time of the exception (for example, if multipart resolution failed)ex
- the exception that got thrown during handler execution- 返回:
- a corresponding ModelAndView to forward to
- 抛出:
Exception
- if no error ModelAndView found