org.springframework.web.servlet.DispatcherServlet-doDispatch
processDispatchResult(processedRequest
, response
, mappedHandler
, mv
, dispatchException
);
org.springframework.web.servlet.DispatcherServlet#processDispatchResult
private void processDispatchResult(HttpServletRequest request
, HttpServletResponse response
,
@Nullable HandlerExecutionChain mappedHandler
, @Nullable ModelAndView mv
,
@Nullable Exception exception
) throws Exception
{
boolean errorView
= false;
if (exception
!= null
) {
if (exception
instanceof ModelAndViewDefiningException) {
logger
.debug("ModelAndViewDefiningException encountered", exception
);
mv
= ((ModelAndViewDefiningException
) exception
).getModelAndView();
}
else {
Object handler
= (mappedHandler
!= null
? mappedHandler
.getHandler() : null
);
mv
= processHandlerException(request
, response
, handler
, exception
);
errorView
= (mv
!= null
);
}
}
if (mv
!= null
&& !mv
.wasCleared()) {
render(mv
, request
, response
);
if (errorView
) {
WebUtils
.clearErrorRequestAttributes(request
);
}
}
org.springframework.web.servlet.DispatcherServlet#render
protected void render(ModelAndView mv
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
Locale locale
=
(this.localeResolver
!= null
? this.localeResolver
.resolveLocale(request
) : request
.getLocale());
response
.setLocale(locale
);
View view
;
String viewName
= mv
.getViewName();
if (viewName
!= null
) {
view
= resolveViewName(viewName
, mv
.getModelInternal(), locale
, request
);
if (view
== null
) {
throw new ServletException("Could not resolve view with name '" + mv
.getViewName() +
"' in servlet with name '" + getServletName() + "'");
}
}
else {
view
= mv
.getView();
if (view
== null
) {
throw new ServletException("ModelAndView [" + mv
+ "] neither contains a view name nor a " +
"View object in servlet with name '" + getServletName() + "'");
}
}
if (logger
.isTraceEnabled()) {
logger
.trace("Rendering view [" + view
+ "] ");
}
try {
if (mv
.getStatus() != null
) {
response
.setStatus(mv
.getStatus().value());
}
view
.render(mv
.getModelInternal(), request
, response
);
}
catch (Exception ex
) {
if (logger
.isDebugEnabled()) {
logger
.debug("Error rendering view [" + view
+ "]", ex
);
}
throw ex
;
}
}
resolveViewName
createView
org.springframework.web.servlet.view.AbstractCachingViewResolver#createView
org.springframework.web.servlet.view.UrlBasedViewResolver#loadView org.springframework.web.servlet.view.InternalResourceViewResolver#buildView
org.springframework.web.servlet.view.UrlBasedViewResolver#buildView
org.springframework.web.servlet.view.AbstractView#render
public void render(@Nullable Map
<String
, ?> model
, HttpServletRequest request
,
HttpServletResponse response
) throws Exception
{
if (logger
.isDebugEnabled()) {
logger
.debug("View " + formatViewName() +
", model " + (model
!= null
? model
: Collections
.emptyMap()) +
(this.staticAttributes
.isEmpty() ? "" : ", static attributes " + this.staticAttributes
));
}
Map
<String, Object> mergedModel
= createMergedOutputModel(model
, request
, response
);
prepareResponse(request
, response
);
renderMergedOutputModel(mergedModel
, getRequestToExpose(request
), response
);
}
org.springframework.web.servlet.view.InternalResourceView#renderMergedOutputModel
protected void renderMergedOutputModel(
Map
<String, Object> model
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
exposeModelAsRequestAttributes(model
, request
);
exposeHelpers(request
);
String dispatcherPath
= prepareForRendering(request
, response
);
RequestDispatcher rd
= getRequestDispatcher(request
, dispatcherPath
);
if (rd
== null
) {
throw new ServletException("Could not get RequestDispatcher for [" + getUrl() +
"]: Check that the corresponding file exists within your web application archive!");
}
if (useInclude(request
, response
)) {
response
.setContentType(getContentType());
if (logger
.isDebugEnabled()) {
logger
.debug("Including [" + getUrl() + "]");
}
rd
.include(request
, response
);
}
else {
if (logger
.isDebugEnabled()) {
logger
.debug("Forwarding to [" + getUrl() + "]");
}
rd
.forward(request
, response
);
}
}
org.springframework.web.servlet.view.AbstractView#exposeModelAsRequestAttributes