Spring與Web環境整合

憨豆只幹扎瓦發表於2022-05-09

1. Spring與Web環境整合

1.1 ApplicationContext應用上下文獲取方式

應用上下文物件是通過new ClasspathXmlApplicationContext(spring配置檔案) 方式獲取的,但是每次從容器中獲得Bean時都要編寫new ClasspathXmlApplicationContext(spring配置檔案) ,這樣的弊端是配置檔案載入多次,應用上下文物件建立多次。

在Web專案中,可以使用ServletContextListener監聽Web應用的啟動,我們可以在Web應用啟動時,就載入Spring的配置檔案,建立應用上下文物件ApplicationContext,在將其儲存到最大的域servletContext域中,這樣就可以在任意位置從域中獲得應用上下文ApplicationContext物件了。

1.2 Spring提供獲取應用上下文的工具

上面的分析不用手動實現,Spring提供了一個監聽器ContextLoaderListener就是對上述功能的封裝,該監聽器內部載入Spring配置檔案,建立應用上下文物件,並儲存到ServletContext域中,提供了一個客戶端工具WebApplicationContextUtils供使用者獲得應用上下文物件。

所以我們需要做的只有兩件事:

①在web.xml中配置ContextLoaderListener監聽器(匯入spring-web座標)

②使用WebApplicationContextUtils獲得應用上下文物件ApplicationContext

1.3 匯入Spring整合web的座標

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

1.4 配置ContextLoaderListener監聽器

<!--全域性引數-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--Spring的監聽器-->
<listener>
	<listener-class>
       org.springframework.web.context.ContextLoaderListener
   </listener-class>
 </listener>

1.5 通過工具獲得應用上下文物件

ApplicationContext applicationContext =    
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
    Object obj = applicationContext.getBean("id");

知識要點

Spring整合web環境步驟

​ ①配置ContextLoaderListener監聽器

​ ②使用WebApplicationContextUtils獲得應用上下文

2. SpringMVC的簡介

2.1 SpringMVC概述

SpringMVC 是一種基於 Java 的實現 MVC 設計模型的請求驅動型別的輕量級 Web 框架,屬於SpringFrameWork 的後續產品,已經融合在 Spring Web Flow 中。

SpringMVC 已經成為目前最主流的MVC框架之一,並且隨著Spring3.0 的釋出,全面超越 Struts2,成為最優秀的 MVC 框架。它通過一套註解,讓一個簡單的 Java 類成為處理請求的控制器,而無須實現任何介面。同時它還支援 RESTful 程式設計風格的請求。

2.3 SpringMVC快速入門

需求:客戶端發起請求,伺服器端接收請求,執行邏輯並進行檢視跳轉。

開發步驟

①匯入SpringMVC相關座標

②配置SpringMVC核心控制器DispathcerServlet

③建立Controller類和檢視頁面

④使用註解配置Controller類中業務方法的對映地址

⑤配置SpringMVC核心檔案 spring-mvc.xml

⑥客戶端發起請求測試

程式碼實現

①匯入Spring和SpringMVC的座標、匯入Servlet和Jsp的座標

 <!--Spring座標-->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.0.5.RELEASE</version>
 </dependency>
 <!--SpringMVC座標-->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>5.0.5.RELEASE</version>
 </dependency>
<!--Servlet座標-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>
<!--Jsp座標-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
</dependency>

②在web.xml配置SpringMVC的核心控制器

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>   
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

③建立Controller和業務方法

public class QuickController {
	public String quickMethod(){
		System.out.println("quickMethod running.....");
		return "index";
	}
}

③建立檢視頁面index.jsp

<html>
<body>
    <h2>Hello SpringMVC!</h2>
</body>
</html>

④配置註解

@Controller
public class QuickController {
	@RequestMapping("/quick")
	public String quickMethod(){
		System.out.println("quickMethod running.....");
			return "index";
	}
}

⑤建立spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc   
    http://www.springframework.org/schema/mvc/spring-mvc.xsd  
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context.xsd">
    <!--配置註解掃描-->
    <context:component-scan base-package="com.itheima"/>
</beans>

⑥訪問測試地址

http://localhost:8080/itheima_springmvc1/quick 

控制檯列印

頁面顯示

1550741609792

2.3 SpringMVC流程圖示

1550741658405

2.4 知識要點

SpringMVC的開發步驟

①匯入SpringMVC相關座標

②配置SpringMVC核心控制器DispathcerServlet

③建立Controller類和檢視頁面

④使用註解配置Controller類中業務方法的對映地址

⑤配置SpringMVC核心檔案 spring-mvc.xml

⑥客戶端發起請求測試

3. SpringMVC的元件解析

3.1 SpringMVC的執行流程

1550741934406

①使用者傳送請求至前端控制器DispatcherServlet。

②DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。

③處理器對映器找到具體的處理器(可以根據xml配置、註解進行查詢),生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。

④DispatcherServlet呼叫HandlerAdapter處理器介面卡。

⑤HandlerAdapter經過適配呼叫具體的處理器(Controller,也叫後端控制器)。

⑥Controller執行完成返回ModelAndView。

⑦HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。

⑧DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器。

⑨ViewReslover解析後返回具體View。

⑩DispatcherServlet根據View進行渲染檢視(即將模型資料填充至檢視中)。DispatcherServlet響應使用者。

3.2 SpringMVC元件解析

  1. 前端控制器:DispatcherServlet

​ 使用者請求到達前端控制器,它就相當於 MVC 模式中的 C,DispatcherServlet 是整個流程控制的中心,由

它呼叫其它元件處理使用者的請求,DispatcherServlet 的存在降低了元件之間的耦合性。

  1. 處理器對映器:HandlerMapping

​ HandlerMapping 負責根據使用者請求找到 Handler 即處理器,SpringMVC 提供了不同的對映器實現不同的

對映方式,例如:配置檔案方式,實現介面方式,註解方式等。

  1. 處理器介面卡:HandlerAdapter

​ 通過 HandlerAdapter 對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理

器進行執行。

  1. 處理器:Handler

​ 它就是我們開發中要編寫的具體業務控制器。由 DispatcherServlet 把使用者請求轉發到 Handler。由

Handler 對具體的使用者請求進行處理。

  1. 檢視解析器:View Resolver

​ View Resolver 負責將處理結果生成 View 檢視,View Resolver 首先根據邏輯檢視名解析成物理檢視名,即具體的頁面地址,再生成 View 檢視物件,最後對 View 進行渲染將處理結果通過頁面展示給使用者。

  1. 檢視:View

​ SpringMVC 框架提供了很多的 View 檢視型別的支援,包括:jstlView、freemarkerView、pdfView等。最常用的檢視就是 jsp。一般情況下需要通過頁面標籤或頁面模版技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面

3.3 SpringMVC註解解析

@RequestMapping

作用:用於建立請求 URL 和處理請求方法之間的對應關係

位置:

​ 類上,請求URL 的第一級訪問目錄。此處不寫的話,就相當於應用的根目錄

​ 方法上,請求 URL 的第二級訪問目錄,與類上的使用@ReqquestMapping標註的一級目錄一起組成訪問虛擬路徑

屬性:

​ value:用於指定請求的URL。它和path屬性的作用是一樣的

​ method:用於指定請求的方式

​ params:用於指定限制請求引數的條件。它支援簡單的表示式。要求請求引數的key和value必須和配置的一模一樣

例如:

​ params = {"accountName"},表示請求引數必須有accountName

​ params = {"moeny!100"},表示請求引數中money不能是100

1.mvc名稱空間引入

名稱空間:xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
約束地址:http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd

元件掃描

SpringMVC基於Spring容器,所以在進行SpringMVC操作時,需要將Controller儲存到Spring容器中,如果使用@Controller註解標註的話,就需要使用<context:component-scan base-package=“com.itheima.controller"/>進行元件掃描。

3.4 SpringMVC的XML配置解析

SpringMVC有預設元件配置,預設元件都是DispatcherServlet.properties配置檔案中配置的,該配置檔案地址org/springframework/web/servlet/DispatcherServlet.properties,該檔案中配置了預設的檢視解析器,如下:

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

翻看該解析器原始碼,可以看到該解析器的預設設定,如下:

REDIRECT_URL_PREFIX = "redirect:"  --重定向字首
FORWARD_URL_PREFIX = "forward:"    --轉發字首(預設值)
prefix = "";     --檢視名稱字首
suffix = "";     --檢視名稱字尾
  1. 檢視解析器

我們可以通過屬性注入的方式修改檢視的的前字尾

<!--配置內部資源檢視解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/"></property>
  <property name="suffix" value=".jsp"></property>
</bean>

3.5 知識要點

SpringMVC的相關元件

前端控制器:DispatcherServlet

處理器對映器:HandlerMapping

處理器介面卡:HandlerAdapter

處理器:Handler

檢視解析器:View Resolver

檢視:View

SpringMVC的註解和配置

請求對映註解:@RequestMapping

檢視解析器配置:

REDIRECT_URL_PREFIX = "redirect:"

FORWARD_URL_PREFIX = "forward:"

prefix = "";

suffix = "";

相關文章