springMVC簡單demo集合(持續更新中……)

是橙汁啊發表於2020-12-02

根據狂神的講課(https://www.bilibili.com/video/BV1aE41167Tu?p=4),重新實現了一部分,可能在某處會比視訊中的程式碼內容要少些。之後會繼續學習繼續更新,增加個人總結。

程式碼同步在github上:https://github.com/HHHHoliday/Spring
程式碼中的註釋已經比較全了,所以CSDN只放總結筆記

1. springmvc-01-servlet模組:回顧servlet(基礎MVC框架)

URL輸入:http://localhost:8080/springmvc_01_servlet_war_exploded/hello?method=add
前端顯示:
springMVC簡單demo集合(持續更新中……)
URL輸入:http://localhost:8080/springmvc_01_servlet_war_exploded/hello?method=delete
前端顯示:
springMVC簡單demo集合(持續更新中……)

2.springmvc-02-springmvc模組:不帶註解的springmvc基礎原理實現

URL輸入:http://localhost:8080/springmvc_02_hellomvc_war_exploded/test
前端顯示:
springMVC簡單demo集合(持續更新中……)
注意:02模組主要用於理解springmvc原理,實際開發中不會這麼寫,太麻煩了。

3. springmvc-03-hello-annotation模組:帶註解的springmvc實現

URL輸入:http://localhost:8080/springmvc_03_hello_annotation_war_exploded/HelloController/hello
前端顯示:
springMVC簡單demo集合(持續更新中……)
03模組設計主要流程:
1.新建一個web專案
2.匯入相關jar包
3.編寫web.xml , 註冊DispatcherServlet
4.編寫springmvc配置檔案
5.接下來就是去建立對應的控制類 , controller
6.最後完善前端檢視和controller之間的對應
7.測試執行除錯.

03模組與02 邏輯上的區別:

  • springmvc-servlet.xml中新增了<mvc:annotation-driven />
    Spring可以使用掃描機制來找到應用程式中所有基於註解的控制器類。該配置代替了02模組中的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter例項,以使@RequestMapping註解生效。02模組中如下:

    <!--新增 處理對映器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--新增 處理器介面卡-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
  • 前端URL的請求,利用註解@RequestMapping實現。
    不需要再去手動配置URL請求路徑。在02模組中,如下:

    <bean id="/test" class="com.holidayX.controller.TestController"/>
    
  • springmvc-servlet.xml中新增了<mvc:default-servlet-handler />靜態資源過濾
    讓Spring MVC不處理靜態資源 .css .js .html .mp3 .mp4

  • springmvc-servlet.xml中新增了<context:component-scan base-package=“com.holidayX.controller”/>
    自動掃描包,讓指定包下的註解生效,由IOC容器統一管理。

  • 在Controller類上,新增註解@Controller
    加上這個註解的類 中的所有方法,如果返回值為String(例如return “hello”),並且有具體頁面可以跳轉,那麼就會被檢視解析器解析。而在02模組中,必須手動新增需要跳轉的頁面名稱,如下:

    mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
    
  • 多個邏輯可以寫在同一個類的不同方法中,不需要每次都去配置和建立一個servlet。
    多個請求可以指向一個檢視(例如return “hello”),但是頁面結果的結果是不一樣的。即檢視是可以被複用的,控制器與檢視之間是弱偶合關係。
    總結,03模組只需要手動配置檢視解析器,而處理器對映器和處理器介面卡只需要開啟註解驅動<mvc:annotation-driven />即可,而省去了大段的xml配置。從而,主要的開發專注於controller後的業務邏輯即可。

4. springmvc-04-controller模組:RestFul風格 實現

  • 將之前URL中的傳參方式(?valuable=1)轉化為隱示引數的方式(/1)。。
    URL輸入:http://localhost:8080/springmvc_04_controller_war_exploded/commit/1/2
    前端顯示:
    springMVC簡單demo集合(持續更新中……)
    檢視請求方法為Get:
    springMVC簡單demo集合(持續更新中……)

  • 通過路徑變數的型別可以約束訪問引數,如果型別不一樣,則訪問不到對應的請求方法,如這裡訪問是的路徑是/commit/1/a,則路徑與方法不匹配(因為程式碼中設定了1和a位置的變數屬性為int),而不會是引數轉換失敗,安全性更高。如下:
    springMVC簡單demo集合(持續更新中……)

  • 可以通過不同的請求方式來實現不同的效果。使路徑變得更加簡潔 / 獲得引數更加方便 / 框架會自動進行型別轉換。如下:請求地址一樣,但是功能可以不同!
    http://127.0.0.1/item/1 查詢,GET
    http://127.0.0.1/item 新增,POST
    http://127.0.0.1/item 更新,PUT
    http://127.0.0.1/item/1 刪除,DELETE

    上一張圖為GET,這裡展示POST方法:
    URL輸入:http://localhost:8080/springmvc_04_controller_war_exploded/a.jsp
    前端顯示:
    springMVC簡單demo集合(持續更新中……)
    點選提交,URL變為:http://localhost:8080/springmvc_04_controller_war_exploded/commit/1/3
    前端顯示:
    springMVC簡單demo集合(持續更新中……)
    檢視請求方法為Post:
    springMVC簡單demo集合(持續更新中……)

5. springmvc-04-controller模組:資料傳遞與顯示

  • 前端傳值,變數名稱必須和後端設定的相同
    URL輸入:http://localhost:8080/springmvc_04_controller_war_exploded/user/t1?username=baolei
    前端顯示:baolei
    注意:controller類的方法中,如果是前端的傳參,可以加上註解@RequestParam表示這個引數是前端傳來的,更清晰些。
  • 使用物件接收前端傳值
    URL輸入:http://localhost:8080/springmvc_04_controller_war_exploded/user/t2?id=1&name=baolei&age=11
    前端顯示:空
    可以看到伺服器上顯示User(id=1, name=baolei, age=11)。
    注意:前端傳遞的引數名和物件名必須一致,否則就是null。

相關文章