Spring MVC 筆記之:工作流程

遇到過的問題

總結(jié)知識(shí)點(diǎn)

我個(gè)人了解一樣?xùn)|西習(xí)慣先從大概上搞清楚它是怎么回事,它的體系結(jié)構(gòu)是怎樣的,它的運(yùn)作流程是怎樣的入手。不弄清楚這些總感覺前后左右無法產(chǎn)生聯(lián)系,知識(shí)點(diǎn)總是孤立的,總有一種此路不通的感覺,強(qiáng)迫癥了。Orz...
因此先將Spring MVC的工作流程梳理了一下,以下僅是一個(gè)剛學(xué)習(xí)者的的個(gè)人的初步理解,部分內(nèi)容可能存在出于理清、歸類的需要而產(chǎn)生的個(gè)人猜測(cè),待我理解更深入了再來更新此文章,希望在此之前沒人看到,沒人看到,哈哈。。
如有錯(cuò)誤歡迎指出,非常感謝。


Spring MVC概貌:
Sping MVC概覽

其中1 、2、3、4按照次序執(zhí)行。下面將依據(jù)這張圖,舉例梳理一次最簡單的請(qǐng)求的大概流程


HTTP Request
 <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
 </servlet-mapping>
  • 然后請(qǐng)求被轉(zhuǎn)發(fā)到DispatcherServlet:
<servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
</servlet>

DispatcherServlet

下面的四個(gè)工作流程都?xì)wDispatcherServlet來調(diào)度


1、HandlerMapping

HandlerMapping開始工作:根據(jù)映射配置找到dispatcher

  • servlet-mapping映射到的HelloWeb確定,下一步將要去同級(jí)目錄下的HelloWeb-servlet.xml文件中去找更多的配置
  • DispatcherServlet查找到HelloWeb-servlet.xml中的<context:component-scan base-package="com.tutorialspoint">,將開始從這個(gè)包下面去尋找加了Spring注解@Controller的類來處理這個(gè)請(qǐng)求
  • 找到了一個(gè)這樣的類:
@Controller
@RequestMapping("/hello")
public class HelloController{
 
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

2、Controller

到這一步,Controller開始工作了,可以看到類名上加了 @Controller注解,以及一個(gè)@RequestMapping注解,這個(gè)注解表明,所有的/hello請(qǐng)求都在這里處理

  • 其中方法printHello()返回了字符串"hello",參數(shù)中的ModelMap是Spring框架傳遞過來給你加處理,以后是要被傳遞到view中用來渲染的。
  • Spring框架定位到HelloWeb-servlet.xml中的<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">找到配置的ViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
</bean>

3、ViewResolver

下面ViewResolver開始工作

  • Controller中的處理結(jié)果中,方法返回了一個(gè)字符串"hello",根據(jù)規(guī)則,在"hello"上加前綴(prefix)"/WEB-INF/jsp/"和后綴(suffix)".jsp",拼成"/WEB-INF/jsp/hello.jsp"
  • 根據(jù)此路徑,找到對(duì)應(yīng)的jsp文件:
<html>
   <head>
   <title>Hello Spring MVC</title>
   </head>
   <body>
   <h2>${message}</h2>
   </body>
</html>

4、View

View開始工作了:創(chuàng)建JSP頁面,并將之前Spring在Controller中傳遞給hello()方法的參數(shù)message取出來,傳遞到頁面的${message}中。


HTTP Response

DispatcherServlet將渲染好的View返回給瀏覽器


至此,一次請(qǐng)求-響應(yīng)完成。


Reference:
Spring - MVC Framework Overview

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,278評(píng)論 6 342
  • 1.Spring web mvc介紹 Spring web mvc和Struts2都屬于表現(xiàn)層的框架,它是Spri...
    七弦桐語閱讀 11,982評(píng)論 2 38
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,632評(píng)論 19 139
  • 前言 對(duì)于Spring MVC項(xiàng)目搭建相信大家按照網(wǎng)上教程來做基本都會(huì),但更多時(shí)候我們應(yīng)該多問幾個(gè)為什么,多思考實(shí)...
    九風(fēng)萍舟閱讀 2,833評(píng)論 0 12
  • 學(xué)習(xí)資料源:慕課網(wǎng) - Spring MVC起步 內(nèi)容概要 一、前端控制器(Front Controller) 二...
    拾壹北閱讀 2,084評(píng)論 0 22

友情鏈接更多精彩內(nèi)容