1. 运行流程图
SpringMVC学习笔记-SpringMVC运行流程/20190217103536894.png)
2. HelloWorld
我们再次来编写一个HelloWorld项目,具体步骤如下所示:
- 加入如下的jar包 SpringMVC学习笔记-SpringMVC运行流程/20190217101019787.png) 
- 在web.xml中配置DispatcherServlet,并拦截所有。 
- 在MVC配置文件applicationContext-mvc.xml中配置<context:component-scan>和视图解析器InternalResourceViewResolver。 - 1 
 2
 3
 4
 5
 6
 7
 8- <!-- 扫描指定包下的注解 --> 
 <context:component-scan base-package="com.shoto.springmvc"/>
 <!-- 配置视图解析器 -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/views/"></property>
 <property name="suffix" value=".jsp"></property>
 </bean>
- 在WEB-INF目录创建views目录,并编写success.jsp成功页面。 
- 在处理器类HelloWorld中定义如下方法。 - 1 
 2
 3
 4
 5- ("/helloWorld") 
 public String helloWorld() {
 System.out.println("Hello World");
 return "success";
 }
3. 运行流程详解
3.1 子流程一
| 1 | 警告: No mapping found for HTTP request with URI [/SpringMVC_6/helloWorld2] in DispatcherServlet with name 'springDispatcherServlet' | 
3.2 子流程二
现在我们在MVC配置文件中配置<mvc:default-servlet-handler/>和<mvc:annotation-driven/>,并在WebContent目录在创建一个hello.html文件(目标资源),此时使用http://localhost:8080/SpringMVC_6/hello.html是响应成功的(**上述运行流程图绿线部分**)。
3.3 子流程三
当SpringMVC中存在对应的映射时,首先会按如下顺序依次执行。(上述运行流程图红线部分)。
1. 通过HandlerMapping获取HandlerExecutionChain对象SpringMVC学习笔记-SpringMVC运行流程/20190217102629539.png)
HandlerExecutionChain由Handler对象和拦截器组成。SpringMVC学习笔记-SpringMVC运行流程/20190217103015801.png)
HandlerMapping定义了请求和Handler对象之间的映射。
2. 获取HandlerAdapter适配器SpringMVC学习笔记-SpringMVC运行流程/20190217103204177.png)
HandlerAdapter适配器会进行参数的绑定,数据校验和格式化等等操作。
3. 调用拦截器的 preHandle方法SpringMVC学习笔记-SpringMVC运行流程/20190217103648994.png)
4. 调用目标Handler的目标方法得到ModelAndView对象SpringMVC学习笔记-SpringMVC运行流程/20190217103801202.png)
5. 调用拦截器的postHandle方法SpringMVC学习笔记-SpringMVC运行流程/20190217103906851.png)
6. 调用processDispatchResult判断是否存在异常SpringMVC学习笔记-SpringMVC运行流程/20190217104151393.png)
7. 在没有异常的情况下,调用render方法中的resolveViewName解析视图。SpringMVC学习笔记-SpringMVC运行流程/20190217104315757.png)
8. 由ViewResolver组件根据ModelAndView对象得到实际的ViewSpringMVC学习笔记-SpringMVC运行流程/20190217104453667.png)
9. 调用render方法,最后由InternalResourceView类的renderMergedOutputModel方法渲染视图,并进行跳转操作SpringMVC学习笔记-SpringMVC运行流程/20190217104812389.png)
10. 调用triggerAfterCompletion方法,执行拦截器的afterCompletion方法SpringMVC学习笔记-SpringMVC运行流程/20190217105045542.png)
SpringMVC学习笔记-SpringMVC运行流程/20190217105138801.png)
3.4 子流程四
调用processDispatchResult判断存在异常后(上述运行流程图蓝线部分),由HandlerExceptionResolver组件处理异常,得到新的ModelAndView对象。SpringMVC学习笔记-SpringMVC运行流程/2019021710543324.png)
processHandlerException方法中会使用异常解析器进行异常的解析。SpringMVC学习笔记-SpringMVC运行流程/20190217105603638.png)