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

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

  • tomcat服务器启动加载项

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

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

<load-on-startup>1</load-on-startup>会让该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控制器对请求的控制细节
    在这里插入图片描述借助mvc流程图来理解一下。
    ①客户端发出类如:<a href="hello">hello world</a>这样的请求。
    ②控制器层,也就是此处的DispatcherServlet接收到请求后,负责控制和指挥,根据请求路径匹配RequestMapping映射的地址,将请求分发给HelloController对象执行其helloHandler方法。
    ③模型层执行调度结束后,返回字符串“success”给控制器。
    ④控制器将结果交由InternalResourceViewResolver视图解析器,后者拼接出形如/WEB-INF/views/success.jsp的视图地址,返回给控制器。
    ⑤控制器将渲染后的最终结果返回给用户。
发布了92 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41885819/article/details/104388753
今日推荐