日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC执行流程【简单理解举例】

發布時間:2024/1/18 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC执行流程【简单理解举例】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請選擇你們的任意門:

  • 本文介紹
  • Spring簡單執行示例
  • 改造成SpringMVC
  • 程序執行流程分析
  • SpringMVC架構圖以及執行流程(可以直接跳過來)
    • 架構圖
    • 名詞解釋(官方話):
    • 執行流程
    • 自己理解

本文介紹

該篇文章主要講解SpringMVC的執行流程,即前端控制器、控制器等組件的調用
先從Spring的一個基礎案例,轉到SpringMVC。以此來觀察到SpringMVC做了哪些改變
然后分析SpringMVC程序的執行流程,知道代碼是如何跑起來的,一個請求又是如何返回一個頁面的
最后根據SpringMVC的架構圖,講解程序中沒有體現的、SpringMVC封裝好的那些組件

作者能力有限,只作為自己學習的筆記,可能理解有誤差(畢竟全信書不如不看書嘛)

Spring簡單執行示例

案例內容:
瀏覽器訪問:localhost/UserServlet,返回一個頁面

  • 項目目錄
  • web.xml配置
    指定要攔截的請求路徑是/UserServlet,由UserServlet類進行處理
<servlet><servlet-name>UserServlet</servlet-name><servlet-class>com.UserServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/UserServlet</url-pattern> </servlet-mapping>
  • UserServlet
    打印語句到控制臺,然后返回success.jsp頁面
public class UserServlet extends HttpServlet{protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Exception{System.out.println("user servlet is running...");req.getRequestDispatcher("success.jsp").forward(req,resp);}//doPost方法省略 }

改造成SpringMVC

上述程序改造成SpringMVC

  • 指定表現成業務處理器,并將其配置成Spring的bean(等同于Servlet)
    當前端訪問時,就會執行該程序
    需要設置方法的訪問地址,確定什么請求會執行這個方法
    設置要跳轉的頁面,不然會報錯,如果不設置跳轉頁面,輸出語句也會正常執行
//設定當前類為Spring的控制類 @Controller public class UserController{//設定當前方法的訪問映射地址,相當于之前web.xml中配置的<url-pattern>@RequestMapping("/save")//設置當前方法返回值類型為String,用于指定請求完成后跳轉的頁面public String save(){System.out.println("user mvc controller is running...");//返回跳轉的頁面名稱return "success.jsp";} }
  • 創建spring-mvc.xml配置文件
    等同于spring的xml配置文件,只是需要區分一下。此時可以刪除原來的spring的配置文件
    在配置文件中開啟組件掃描注解驅動,不然掃描不到上邊類的@Controller注解,也就無法把UserController交給springMVC控制
<context:component-scan base-package="com"/>
  • 修改web.xml
    用DispatcherServlet頂替掉之前的UserServlet,目前可以將DispatcherServlet理解成== 看大門 == 的,專門攔截請求
    既然要攔截請求,那么作為一個正經看大門的,也要有原則!所以需要配置具體攔截哪個請求
    看大門的有了,那么用戶真正想進去的還是== 辦公室 (UserController)== 啊,只有spring加載了才可以。所以加上,把spring-mvc.xml文件加載進來
<servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--初始化時,讀取spring-mvc.xml文件的配置,加載bean--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-mvc.xml</param-value></init-param> </servlet><!--讀取bean中所有添加了映射注解的內容--> <servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern> </servlet-mapping>

程序執行流程分析

  • 服務器啟動
  • 加載web.xml中的DispatcherServlet
  • 讀取spring-mvc.xml中的配置,加載所有com包中所有標記為bean的類
  • 讀取bean中方法上標注@RequestMapping的內容(知道自己可以處理哪些請求)
  • 處理請求
  • DispatcherServlet配置攔截所有請求(因為在web.xml中配置的是/)
  • 使用請求路徑與所有加載的@RequestMapping的內容進行對比
  • 找到匹配的訪問路徑,執行對應的方法
  • 根據方法返回值,在webapp目錄中查找對應的頁面并展示

SpringMVC架構圖以及執行流程(可以直接跳過來)

架構圖

名詞解釋(官方話):

  • 前端控制器DispatcherServlet: 整體流程控制中心,降低組件間的耦合性
  • 處理器映射器HandlerMapping: 根據用戶請求找到對應具體的Handler處理器
  • 處理器Handler: 業務處理的核心類(servlet類似,自己開發)
  • 處理器適配器HandlAdapter: 對Handler處理器進行執行,即找到要執行的servlet方法
  • 視圖解析器View Resolver: 將處理結果生成View視圖
  • View: 最終產出的頁面結果

執行流程

  • 用戶發送請求 --> 前端控制器
  • 前端控制器(若配置了攔截此路徑)會攔截此請求,然后調用處理器映射器
  • 處理器映射器確定要調用哪個處理器,并可能執行處理器鏈(過濾器、攔截器),最后將處理器地址返回給前端控制器
  • 前端控制器拿著地址調用處理器適配器,由其去調用具體的處理器(業務處理方法實現)
  • 處理器會返回頁面以及數據(Model And View)給處理器適配器
  • 處理器適配器將其再返回給前端控制器
  • 前端控制器調用視圖解析器,將MV解析成JSP或者HTML,返回給前端控制器
  • 最后前端控制器將解析完的頁面返回給用戶
  • 自己理解

    可能有點啰嗦,但是卻很能理解(基于真事改編)**
    一次請求就可以看做是你去銀行辦事
    假設小明(沒錯,就是他)今天要去銀行開通手機支付

    • 你不能直接去柜臺辦理(除非你特別豪橫、有錢、知道哪個柜臺可以辦理這個業務)
    • 所以第一步是去咨詢前臺(前端控制器),告訴前臺小哥哥/小姐姐你要辦理更改密碼這個業務
    • 前臺在電腦上查詢(處理器映射器)這個業務是哪個柜臺能辦理(前臺業務能力真低)
    • 然后前臺就告訴你在預約機器(處理器適配器)上排隊取號,選便民服務(不要問我這是不是真的,我不知道)
    • 當輪到你時,你就去柜臺(處理器)辦理業務,柜臺小姐姐說已經改好了,但是需要你在手機銀行軟件上轉賬三次進行激活(激活操作就相當于Model And View,此時用戶還不能直接處理這個數據)
    • 小明不知道該怎么操作,于是還是要問前臺(前端控制器)
    • 那業務低的前臺(前端控制器)就問問他們的經理(視圖解析器
    • 經理(視圖解析器)告訴前臺(前端控制器)操作步驟(View),然后前臺再告訴小明,自此,小明這個業務才算完成

    總結

    以上是生活随笔為你收集整理的SpringMVC执行流程【简单理解举例】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。