(十一)SpringMVC学习笔记-SpringMVC运行流程

一、运行流程图

(十一)SpringMVC学习笔记-SpringMVC运行流程_第1张图片

二、HelloWorld

我们再次来编写一个HelloWorld项目,具体步骤如下所示:

  1. 加入如下的jar包
    (十一)SpringMVC学习笔记-SpringMVC运行流程_第2张图片
  2. 在web.xml中配置DispatcherServlet,并拦截所有。
  3. 在MVC配置文件applicationContext-mvc.xml中配置和视图解析器InternalResourceViewResolver。
    
    <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>
    
  4. 在WEB-INF目录创建views目录,并编写success.jsp成功页面。
  5. 在处理器类HelloWorld中定义如下方法。
    @RequestMapping("/helloWorld")
    public String helloWorld() {
           
    	System.out.println("Hello World");
    	return "success";
    }
    

三、运行流程详解

子流程一

当我使用http://localhost:8080/SpringMVC_6/helloWorld2进行请求时,因为此时SpringMVC不存在helloWorld2映射,且在未配置的情况下,此时控制台与打印如下信息并且给出404页面(上述运行流程图黑线部分):

警告: No mapping found for HTTP request with URI [/SpringMVC_6/helloWorld2] in DispatcherServlet with name 'springDispatcherServlet'
子流程二

现在我们在MVC配置文件中配置,并在WebContent目录在创建一个hello.html文件(目标资源),此时使用http://localhost:8080/SpringMVC_6/hello.html是响应成功的(上述运行流程图绿线部分)。

子流程三

当SpringMVC中存在对应的映射时,首先会按如下顺序依次执行。(上述运行流程图红线部分)。

1. 通过HandlerMapping获取HandlerExecutionChain对象
(十一)SpringMVC学习笔记-SpringMVC运行流程_第3张图片
HandlerExecutionChain由Handler对象和拦截器组成。
(十一)SpringMVC学习笔记-SpringMVC运行流程_第4张图片
HandlerMapping定义了请求和Handler对象之间的映射。

2. 获取HandlerAdapter适配器
(十一)SpringMVC学习笔记-SpringMVC运行流程_第5张图片
HandlerAdapter适配器会进行参数的绑定,数据校验和格式化等等操作。

3. 调用拦截器的 preHandle方法
(十一)SpringMVC学习笔记-SpringMVC运行流程_第6张图片
4. 调用目标Handler的目标方法得到ModelAndView对象
(十一)SpringMVC学习笔记-SpringMVC运行流程_第7张图片
5. 调用拦截器的postHandle方法
(十一)SpringMVC学习笔记-SpringMVC运行流程_第8张图片
6. 调用processDispatchResult判断是否存在异常
(十一)SpringMVC学习笔记-SpringMVC运行流程_第9张图片
7. 在没有异常的情况下,调用render方法中的resolveViewName解析视图。
(十一)SpringMVC学习笔记-SpringMVC运行流程_第10张图片
8. 由ViewResolver组件根据ModelAndView对象得到实际的View
(十一)SpringMVC学习笔记-SpringMVC运行流程_第11张图片
9. 调用render方法,最后由InternalResourceView类的renderMergedOutputModel方法渲染视图,并进行跳转操作
(十一)SpringMVC学习笔记-SpringMVC运行流程_第12张图片
10. 调用triggerAfterCompletion方法,执行拦截器的afterCompletion方法
(十一)SpringMVC学习笔记-SpringMVC运行流程_第13张图片
(十一)SpringMVC学习笔记-SpringMVC运行流程_第14张图片

子流程四

调用processDispatchResult判断存在异常后(上述运行流程图蓝线部分),由HandlerExceptionResolver组件处理异常,得到新的ModelAndView对象。
(十一)SpringMVC学习笔记-SpringMVC运行流程_第15张图片
processHandlerException方法中会使用异常解析器进行异常的解析。
(十一)SpringMVC学习笔记-SpringMVC运行流程_第16张图片

你可能感兴趣的:(SpringMVC)