第一个Spring MVC执行流程分析

第一个Spring MVC执行流程

上节中我们编写了第一个Spring MVC的程序,这里来看下它的执行流程是什么样子的,这里只是简单的从表面上看下执行流程,实际上在Spring MVC内部还有很多流程,在后面的时候,我们再详细介绍。

第一个Spring MVC执行流程(表面版)

1.由浏览器发送请求localhost:8080/01-first/hello.do,该请求到达web服务器(tomcat)后,会在web.xml文件中查找与之匹配的servlet,我们在web.xml文件中设置的所有以.do结尾的请求都会匹配到Spring MVC的核心控制器DispatcherServlet上。

2.DispatcherServlet会去我们开发者编写的springmvc.xml配置文件中查找与hello.do请求匹配的Controller,这里配置的是com.monkey1024.controller.HelloSpringMVC。

3.DispatcherServlet会将请求转到HelloSpringMVC类上,并调用该类中的handleRequest方法来处理这个请求。

4.在handleRequest方法中执行完成后会将ModelAndView对象返回给DispatcherServlet,然后DispatcherServlet将jsp响应给浏览器,流程结束。

上面的流程只是表面的一个执行流程,实际在Spring MVC内容还有更复杂的流程,这部分流程我们在后面再详细介绍,通过这个简单的执行流程,我们可以看到大体上Spring MVC的工作方式,它的底层实际上就是一个servlet,主要依赖于其核心的中央控制器DispatcherServlet,请求和响应等一系列的工作都是由这个servlet来完成的,基于这样的原因,我们才会称DispatcherServlet为Spring MVC的中央控制器了。

配置视图解析器

在controller中我们在ModelAndView中的setViewName方法里面传入要跳转的jsp的路径和名字,如果有多个controller的话,需要在每个里面都编写路径和jsp的名字,这样的话比较繁琐,这时可以通过使用Spring MVC给我们提供的一个视图解析器来解决这个问题。

打开springmvc.xml的配置文件,在里面添加一个视图解析器:

<!-- 视图解释类 -->
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

其中prefix表示前缀,即你的jsp所在的路径。
suffix表示后缀,即文件的后缀名。
之后来修改一下HelloSpringMVC中的内容,因为在springmvc.xml文件中已经配置了文件路径和后缀名了,所以将之前的:

mv.setViewName("/jsp/first.jsp");

修改为:

mv.setViewName("first");

这样以后就不用再setViewName方法中写路径了,并且也方便日后的维护。