springMVC从发送hello请求到响应的执行流程分析

启动tomcat服务器后,借助springMVC框架,我们可以很方便高效控制客户端发出的各种请求。分析请求执行流程前,我们需要了解一下服务器启动时,都做了什么。

  • tomcat服务器启动加载项

加载web.xml文件
这一点大家应该都熟知了,不多赘述。
加载Servlet
我们不妨回忆一下web.xml的部分内容。

<servlet>
  <servlet-name>DispatcherServletservlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
  <init-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:springmvc.xmlparam-value>
  init-param>
  <load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
  <servlet-name>DispatcherServletservlet-name>
  <url-pattern>/url-pattern>
servlet-mapping>

1会让该DispatcherServlet在tomcat启动时就进行加载,并且/会让所有请求都先经过该DispatcherServlet。
springmvc.xml加载
在web.xml配置DispatcherServlet中配置了init-param初始化参数,即springmvc配置文件的信息,所以该文件连同该servlet会一同在tomcat启动时加载。
看一下springmvc.xml配置文件的部分内容。

        <context:component-scan base-package="com.wuwl.handler">context:component-scan>
       <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/">property>
            <property name="suffix" value=".jsp">property>
        bean>
        <mvc:annotation-driven>mvc:annotation-driven>

首先,配置了自定义扫描的包,需要先进行扫描。与此同时,类如HelloController等标注了@Controller注解的类,会创建成对象,加入ioc容器中,默认单例。紧接着bean标签配置的视图解析器,也会加载InternalResourceViewResolver对象到ioc容器中。

  • springMVC控制器对请求的控制细节
    springMVC从发送hello请求到响应的执行流程分析_第1张图片借助mvc流程图来理解一下。
    ①客户端发出类如:hello world这样的请求。
    ②控制器层,也就是此处的DispatcherServlet接收到请求后,负责控制和指挥,根据请求路径匹配RequestMapping映射的地址,将请求分发给HelloController对象执行其helloHandler方法。
    ③模型层执行调度结束后,返回字符串“success”给控制器。
    ④控制器将结果交由InternalResourceViewResolver视图解析器,后者拼接出形如/WEB-INF/views/success.jsp的视图地址,返回给控制器。
    ⑤控制器将渲染后的最终结果返回给用户。

你可能感兴趣的:(Spring)