深入理解SpringMVC執行流程

首先了解MVC是什麼

  • mvc是模型(module)、視圖(view)、控制器(controller)的簡寫,是一種軟件設計規範
    是將業務邏輯、數據、顯示分離開來組織代碼
  • mvc主要是作用是降低了視圖與業務邏輯之間的雙向耦合
  • mvc不是一種設計模式,mvc是一種架構模式

module(模型):數據模型,提供要展示的數據,包含數據和行爲

view(視圖):負責進行模型的展示,一般就是用戶看到的界面

controller(控制器):接收用戶的請求,委託給模型進行處理,處理完成以後把返回的數據模型返回給視圖,由視圖負責展示,控制器承擔一個調度員你的責任

spring mvc的特點

  • 輕量級,簡單易學
  • 高效、基於請求響應的mvc框架
  • 與Spring兼容性好,無縫結合
  • 約定優於配置
  • 功能強大:RESTful、數據驗證、格式化、本地化、主題等
  • 簡潔靈活

SpringMVC是圍繞DispatcherServlet【調度servlet】來設計的
dispatcherservlet的作用就是將請求分發給不同的處理器

重點理解SpringMVC的執行流程
在這裏插入圖片描述

1.用戶提交請求給頁面(提交給dispatcherservlet)
實際上完成的操作是提交了要訪問那個控制器
url分爲三部分
服務器域名
部署在服務器上的web站點
控制器
2.HandlerMapping爲處理器映射。dispatcherservlet調用HandlerMapping尋找要使用哪個handler
3.HandlerExcution表示具體的Handler,其主要作用是根據url尋找對應的控制器
4.HandlerExcution將解析後的信息傳遞給dispatcherservlet,如解析控制器映射

<!--處理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<!--BeanNameUrlHandlerMapping:創建一個bean去尋找對應的解析器-->
<bean id="/hello" class="com.superman.controller.HelloController"/>

5.HandAdapter表示處理器適配器,按照特定的規則去尋找handle
6.handler去執行具體的controller

<!--處理器適配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>


<!--BeanNameUrlHandlerMapping:創建一個bean去尋找對應的解析器-->
<beclass="com.superman.controller.HelloControan id="/hello" ller"/>

7.controller將具體的執行信息返回給handleradapter,如moduleandeview

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();

        //業務代碼
        String result="hello spring";
        mv.addObject("msg",result);

        //視圖跳轉
        mv.setViewName("test");

        return mv;
    }
}

8.handleradapter將視圖邏輯名或模型傳遞給dispatcherservlet
9.dispatcherservlet調用視圖解析器(viewresolver)來解析handleradapte傳遞的邏輯視圖名
10.視圖解析器將解析的邏輯視圖名傳給dispatcherservlet,然後dispatcherservlet去調用這個view

<!--視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    <!--配置前綴-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--配置後綴-->
    <property name="suffix" value=".jsp"/>
</bean>

如果遇到代碼沒有問題出現404錯誤,需要檢察環境,檢查打包過程中是否有lib文件,沒有的話需要手動創建並且導入必要的依賴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章