Spring學習三:spring-web及spring-webmvc


spring-web:spring與web集成

spring-web的作用:包含web應用開發時,用到spring框架時所需的核心類,包括自動載入webapplicationcontext特性的類、struts與jsf集成類、文件上傳的支持類、filter類和大量工具輔助類。

通過spring獲取應用上下文對象

  • 在僅僅使用spring的時候,應用上下文的獲取如下圖:
    弊端:每次從容器中獲取bean都要編寫new ClassPathXmlApplicationContext,每次獲取都要加載一次核心配置文件,應用上下文創建多次。

  • 自己寫工具類實現(模擬spring獲取app原理)
    在web項目中,可以使用ServletContextListener監聽web應用的啟動,在tomcat啟動的時候加載一次spring配置文件並創建應用上下文對象,並將其存儲在最大的域servletContext域中,這樣就可以在任意位置從域中獲取上下文對象了。

  • spring-web提供獲取應用上下文的工具
    本功能使用依賴:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.2.7.RELEASE</version>
    </dependency>
    

    spring-web提供了一個監聽器ContextLoaderListener,該監聽器內部加載spring配置文件,創建應用上下文對象,並存儲在ServletContext域中,提供一個客戶端工具WebApplicationContextUtils供使用者獲取應用上下文對象。

spring-webmvc

本功能使用依賴:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.7.RELEASE</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.1</version>
</dependency>

spring-webmvc所依賴的包:(包含spring-context,spring-web)

在使用springmvc之前,我們都需要寫servlet接口的實現類。現在使用springmvc,通過一套注解,可以讓一個簡單的java類成為處理請求的控制器,無需實現任何接口。

springmvc快速入門

開發步驟:
1. 導入springmvc坐標
2. 配置springmvc核心前端控制器DispathcerServlet,讓servlet去加載springmvc配置文件
3. 使用注解配置Controller類中業務方法的映射地址
4. 配置springmvc核心配置文件spring-mvc.xml(可任意命名)
5. 客戶端發起請求

概念理解:Spring父容器與子容器
父子容器的主要作用應該是划分框架邊界。有點單一職責的味道。查看文章:spring和springmvc父子容器的理解 父子容器概念

springmvc執行流程

springmvc框架是使用servlet充當前端控制器。

  • 流程圖示
  • 完整執行流程

springmvc響應返回

  • 重點是springmvc自動將對象轉化為json字符串返回數據
    • 需要引入jackson包
    • @ResponseBody聲明告知mvc,不進行視圖跳轉,而是直接進行數據響應
    • 配置mvc的注解驅動:<mvc:annotation-driven/>
      在springmvc的各個組件中,處理器映射器,處理器適配器,視圖解析器稱為springmvc的三大組件。
      使用<mvc:annotation-driven/>自動加載RequestMappingHandlerMapping(處理器映射器)和RequestMappingHandlerAdpter(處理器適配器)。
      可以在spring-mvc.xml配置文件中配置<mvc:annotation-driven/>代替注解處理器和適配器的配置,
      同時使用<mvc:annotation-driven/>默認底層就會集成jsckson進行對象或集合的json字符串轉換。
      

springmvc獲得請求數據

  • 獲得基本類型參數

    • Controller中的業務方法的參數名稱要與請求參數的name一致,參數值會自動映射匹配
  • 獲得POJO類型參數

    • Controller中的業務方法的POJO參數的屬性名要與請求參數的name一致,參數值會自動映射匹配
  • 獲得數組類型參數

    • Controller中的業務方法的數組名稱要與請求參數的name一致,參數值會自動映射匹配
  • 獲得集合類型參數

    • 前端發起ajax請求時,可以指定contentType為json形式,那么在方法參數位置使用@RequestBody可以直接接收集合數據,二無需使用POJO包裝
  • 參數綁定:@RequestParam

    • 當請求參名稱與Controller的業務方法參數名稱不一致時,就需要通過@RequestParam注解顯示綁定
  • 占位符參數獲取:@PathVariable

  • 獲取請求頭信息

  • 解決請求中文亂碼

代碼

學習來源:https://www.bilibili.com/video/BV1Fi4y1S7ix?p=43


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM