//前端控制器分派方法
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
int interceptorIndex = -1;
try {
ModelAndView mv;
boolean errorView = false;
try {
//检查是否是请求是否是multipart(如文件上传),如果是将通过MultipartResolver解析
processedRequest = checkMultipart(request);
//步骤2、请求到处理器(页面控制器)的映射,通过HandlerMapping进行映射
mappedHandler = getHandler(processedRequest, false);
if (mappedHandler == null || mappedHandler.getHandler() == null) {
noHandlerFound(processedRequest, response);
return;
}
//步骤3、处理器适配,即将我们的处理器包装成相应的适配器(从而支持多种类型的处理器)
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
// 304 Not Modified缓存支持
//此处省略具体代码
// 执行处理器相关的拦截器的预处理(HandlerInterceptor.preHandle)
//此处省略具体代码
// 步骤4、由适配器执行处理器(调用处理器相应功能处理方法)
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
// Do we need view name translation?
if (mv != null && !mv.hasView()) {
mv.setViewName(getDefaultViewName(request));
}
// 执行处理器相关的拦截器的后处理(HandlerInterceptor.postHandle)
//此处省略具体代码
}
catch (ModelAndViewDefiningException ex) {
logger.debug("ModelAndViewDefiningException encountered", ex);
mv = ex.getModelAndView();
}
catch (Exception ex) {
Object handler = (mappedHandler != null ? mappedHandler.getHandler() : null);
mv = processHandlerException(processedRequest, response, handler, ex);
errorView = (mv != null);
}
//步骤5 步骤6、解析视图并进行视图的渲染
//步骤5 由ViewResolver解析View(viewResolver.resolveViewName(viewName, locale))
//步骤6 视图在渲染时会把Model传入(view.render(mv.getModelInternal(), request, response);)
if (mv != null && !mv.wasCleared()) {
render(mv, processedRequest, response);
if (errorView) {
WebUtils.clearErrorRequestAttributes(request);
}
}
else {
if (logger.isDebugEnabled()) {
logger.debug("Null ModelAndView returned to DispatcherServlet with name '" + getServletName() +
"': assuming HandlerAdapter completed request handling");
}
}
// 执行处理器相关的拦截器的完成后处理(HandlerInterceptor.afterCompletion)
//此处省略具体代码
catch (Exception ex) {
// Trigger after-completion for thrown exception.
triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, ex);
throw ex;
}
catch (Error err) {
ServletException ex = new NestedServletException("Handler processing failed", err);
// Trigger after-completion for thrown exception.
triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, ex);
throw ex;
}
finally {
// Clean up any resources used by a multipart request.
if (processedRequest != request) {
cleanupMultipart(processedRequest);
}
}
}
分享到:
相关推荐
在学习SpringMVC的实践中,完成商品列表的加载是一个重要的环节。这个过程包括创建商品列表页面、创建Item的JavaBean类(POJO)、编写ItemController类、启动项目进行测试等步骤。通过这些实际操作,可以深入理解...
本资料包包含丰富的SpringMVC学习资源,提供了代码示例和详细介绍,对于深入理解和掌握SpringMVC非常有帮助。 一、SpringMVC基础 SpringMVC的核心组件包括DispatcherServlet(前端控制器)、Controller(控制器)、...
在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...
SpringMVC 学习指南 SpringMVC 是 Spring 框架中的一个 web 组件,它提供了丰富的功能来构建稳健的 web 应用。 SpringMVC 的核心思想是基于每个逻辑和功能是高可配置的架构和设计的。下面是 SpringMVC 的学习指南:...
这个“SpringMVC学习编程代码”压缩包包含了一整套用于学习SpringMVC的实例代码,旨在帮助开发者更好地理解和掌握这一强大的Web开发工具。 在SpringMVC中,我们首先会接触到配置文件,这通常是`springmvc-config....
**SpringMVC学习文档概述** SpringMVC是Spring框架的一个模块,主要负责处理Web应用程序的请求和响应。它是一个基于模型-视图-控制器(MVC)架构模式的轻量级Java Web开发框架,旨在简化Web应用开发并提高可测试性...
以下是对SpringMVC学习资料的详细解析: 1. **MVC架构**:在SpringMVC中,MVC架构将应用程序分为三个主要组件——模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑,视图负责展示结果,而控制...
SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)架构的应用程序。SpringMVC 的核心是 DispatcherServlet,它作为前端控制器,负责接收请求...
### SpringMVC基础知识详解 #### 一、SpringMVC概览 **SpringMVC**是Spring框架中的一个重要组成部分,主要用于构建Web应用程序。...通过这些内容的学习,可以帮助初学者快速入门并掌握SpringMVC的基本用法。
SpringMVC是Spring框架的一个重要模块,用于构建Web应用程序的后端控制器。它是一个轻量级的MVC..."SpringMVC学习指南"这个压缩包中的PDF文档,很可能会涵盖这些内容的详细讲解,是学习和提升SpringMVC技能的好资源。
通过"SpringMVC学习版源码",初学者可以详细查看这些组件的实现,理解它们如何协同工作,从而加深对SpringMVC的理解。MySpringMVC可能是该项目的主模块,包含了整个SpringMVC应用的配置、控制器、模型、视图等组件。...
在这个"SpringMvc学习系列整合源码"中,你将有机会深入理解SSM(Spring、SpringMVC、MyBatis)框架的集成和工作原理。 首先,Spring作为基础框架,负责管理应用的组件,包括依赖注入(DI)和面向切面编程(AOP)。...
SpringMVC是Spring框架中的一个重要模块,是用于构建Web应用程序的全功能MVC(Model-View-Controller)架构实现。SpringMVC的核心目标是简化Web层的开发流程,即通过注解等现代编程方法,使开发人员能够专注于业务...
SpringMVC是Java Web开发中的一个轻量级框架,它为构建基于模型-视图-控制器(MVC)模式的应用程序提供了强大的支持。本篇学习笔记将深入探讨SpringMVC的核心概念、配置以及常见操作。 1.1 SpringMVC入门 在开始...
### SpringMVC学习课堂笔记知识点总结 #### 一、SpringMVC基础知识 ##### 1.1 什么是SpringMVC? SpringMVC是Spring框架的一部分,主要用于构建Web应用程序。它遵循了MVC(Model-View-Controller)设计模式,提供...
个人学习spring框架时记录的笔记,纯手敲,SpringIOC+SpringMVC学习笔记,有兴趣的可以参考
SpringMVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。它是Java企业级应用开发中的一个重要组件,以其轻量级、灵活且易于使用的特性深受开发者喜爱。在本“springMVC框架学习备份...
**SpringMVC 学习笔记一** 在Java Web开发领域,SpringMVC是Spring框架的一个重要组成部分,它是一个用于构建Web应用程序的Model-View-Controller(MVC)框架。本学习笔记将深入探讨SpringMVC的基本概念、核心组件...
SpringMVC是Java web开发中一个非常重要的框架,它基于模型-视图-控制器(Model-View-Controller)设计模式...这份“SpringMVC学习笔记”包括了从基础到进阶的全面内容,旨在帮助读者从零开始掌握SpringMVC的各个方面。
总之,SpringMVC 学习涉及到一系列步骤,从理解其核心机制、创建项目结构、配置文件,到编写控制器和视图解析器,再到熟练使用注解来简化配置。通过深入学习和实践,开发者可以充分利用 SpringMVC 的强大功能,高效...