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的視圖地址,返回給控制器。
    ⑤控制器將渲染後的最終結果返回給用戶。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章