一、Spring MVC 运行流程
在spring-mvc-handler项目的controller包中新增一个HalloContrller,增加hallo方法,Debug Spring MVC的运行流程,在index页面增加/hallo的超链接,断点打在 doDispatch 方法上,Debug模式启动应用并点击首页的hallo超链接
第一步:前端控制器DispatcherServlet收到请求,调用doDispatch()方法处理
第二步:根据HandlerMapping中保存的请求映射信息找到处理当前请求的处理器执行链,包含拦截器
第三步:根据当前处理器找到他的适配器HandlerAdapter
第四步:拦截器的preHandler()方法执行
第五步:适配器执行目标方法,返回ModelAndView对象
第六步:处理器的postHandler()方法执行
第七步:处理结果;页面渲染
- 如果有异常使用异常解析器进行处理,处理之后返回ModelAndView
- 调用render()方法进行页面渲染
- 视图解析器根据视图名得到视图对象
- 视图对象调用render()方法
- 执行拦截器的afterCompletion()方法
二、Spring、Spring MVC 整合
IDEA创建Maven工程spring-mvc-spring,添加Spring、Spring MVC、Servlet、Jackson、文件上传依赖
<properties> <spring-version>5.3.13</spring-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.13.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.13.1</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> 复制代码
选中项目,点击Add Framework,选择添加 Web Application
选中项目,点击顶部菜单中的File -> Project Structure -> Artifacts,在右侧WEB-INF下新建lib文件夹,将Available Element下的Jar包全部选中导入lib文件夹下
点击 Apply 并关闭该窗口。