第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

純 JAVA 搭建 Spring MVC 項目

1. 前言

Spring MVC 項目可以真正意義上實現(xiàn)零 XML 配置,注意不是不配置,而是可以不使用 XML 配置。Spring MVC 提供了大量的注解,讓 JAVA 開發(fā)者以自己最擅長的 JAVA 語法編寫配置信息。

本節(jié)課程,將向大家介紹如何使用純 JAVA 的方式搭建 Spring MVC 項目,通過本節(jié)課程,你將學習到:

  • 了解搭建 Spring MVC 的流程。這既是本章節(jié)的難點也是重點;
  • 了解純 JAVA 配置的重要注解。

2. 前期準備

欲善其功,必先利其器。使用 Spring MVC 之前,準備好一系列的工具軟件。

  • 操作系統(tǒng): 可以選擇 WIndowsLiunxMAC 。本課程選擇 WIndows 操作系統(tǒng);
  • IDE 工具: 本課程選擇 eclipse。這不是唯一、強制的要求,你可以選擇自己喜歡的開發(fā)工具;
  • JAVA JDK : 這個不用多說,它是必須的。本文選擇 JDK 1.8+;
  • 服務器組件: 本文選擇 tomcat 8.X

基于 Spring MVC 的開發(fā)本質(zhì)還是編寫 JAVA 程序,區(qū)別在于 Spring MVC 提供了更高級層面的 API 組件。所以,開發(fā)時需要在項目中添加 Spring MVC 相關(guān)的 API 包。有 2 種方案可獲取這些 JAR 依賴包:

Tips: 本課程采用 Spring Framework 5.1.13 版本。

  • 使用 Maven 依賴管理功能自動添加 Spirng MVC 項目所需要的依賴包。本課程使用此方案。

3. 搭建流程

3.1 新建 maven 項目

  1. eclipse 中新建 Maven 項目;

圖片描述

  1. 選擇 maven 中的 webapp 骨架模板 ,在后續(xù)的對話框中輸入項目名稱等信息。

圖片描述

3.2 添加依賴包

項目創(chuàng)建成功后,會發(fā)現(xiàn)項目上有紅色的錯誤提示,這個不用緊張。因為項目自動創(chuàng)建了一個 jsp 文件,而 jsp 所依賴的 servlet 包我們還沒有加進來。

打開項目中的 pom.xml 文件,在文件中添加項目所需要的依賴 jar 包:

  • javax.servlet-api: servlet 規(guī)范包;
  • spring-context: spring 最基礎(chǔ)、最重要的核心包。Maven 有一個依賴傳遞功能,會自動添加 spring-context 所依賴的其它包;
  • spring-web: springweb 項目的支持包,這個不用解釋,肯定不能少;
  • spring-webmvc: 從名字上看,知道它應該是主角,Spring MVC 核心包。

完整的依賴信息如下:

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.5</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.13.RELEASE</version>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>5.1.13.RELEASE</version>
		<scope>compile</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.1.13.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>4.0.1</version>
		<scope>provided</scope>
	</dependency>
</dependencies>

Maven 會自動從遠程倉庫下載這些依賴包,項目中也可以看到下載下來的依賴包:

圖片描述

大家會看到,除了在 pom.xml 文件中指定的依賴包外,還有其它的包,這個就是 Maven 的依賴傳遞功能實現(xiàn)的。好了! 有了這些包后,就可以使用 Spring 提供的 WEB MVC API 了。

3.3 兩個上下文對象

Spring 提供了很厲害的 IOC & DI 工廠,這個工廠對象在 web 項目中的具體名稱叫 WebApplicationContext,也稱其為上下文對象,用來創(chuàng)建 Spring MVC 項目中的各色功能組件。所以,欲使用 Spring MVC,則先要想辦法創(chuàng)建上下文對象。

Spring 建議 Spring MVC 項目中提供 2WebApplicationContext 對象:

  • 一個 WebApplicationContext 對象用來創(chuàng)建 Spring MVC 相關(guān)的組件,稱其為 Web 上下文對象
  • 一個用來創(chuàng)建程序中其它的具體功能組件(如邏輯組件、數(shù)據(jù)層訪問組件……),稱其為 Root (根)上下文對象 。

圖片描述

兩個上下文對象各自負責的組件范圍

如果只創(chuàng)建一個 WebApplicationContext 對象會產(chǎn)生什么結(jié)果?

如果僅僅是測試、學習,從初期來看,沒有什么不可。從長遠來看,建議還是聽從建議。

Tips: 這兩個 WebApplicationContext對象存在底層上的差異性。一個支持事務,另一個不支持。有各自的職責。

Spring MVC 提供了一個叫 DispatcherServlet 的組件(本質(zhì)就是一個 Servlet),此組件用來作為進入程序的唯一入口。是 Spring MVC 項目的“門神”。

Tips: 可稱 DispatcherServlet 為中央控制器或前端控制器。

好了!現(xiàn)在理一下頭緒:

  • 一定要在整個項目運作之前先讓 DispatcherServlet 組件開始工作,DispatcherServlet 除了充當門神外,還會創(chuàng)建一個與自己有關(guān)聯(lián)的 WebApplicationContext 工廠對象,即 Web 上下文對象
  • Spring 另提供有名為 ContextLoaderListener 的監(jiān)聽器組件,它可以監(jiān)聽程序的啟動過程,并在程序啟動時創(chuàng)建另一個 WebApplicationContext 工廠對象,即 Root 上下文對象。

3.4 編寫配置類

下面,使用純 JAVA 方式為 Spring MVC 的初次運行提供必備的配置信息 。

先認識一個組件,做好思想準備,這個組件名字很長,別嚇到你了:AbstractAnnotationConfigDispatcherServletInitializer。名字雖然有點長,但是很體貼,怕你不知道它的作用,名字本身就告訴了你:基于注解的初始化 DispatcherServlet 的抽象組件,簡單說就是一個 WEB 初始化組件,用來替代 web.xml 的功能。

該動手了!構(gòu)建一個繼承了AbstractAnnotationConfigDispatcherServletInitializer 的類:

package com.mk.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
	@Override
	protected Class<?>[] getRootConfigClasses() {	
		return null;
	}
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return null;
	}
	@Override
	protected String[] getServletMappings() {
		return null;
	}
}

嘿!居然有 3 個方法強制性要求實現(xiàn),那么,這 3 個方法分別是干嘛用的?

WebInitializer 這個類會自動創(chuàng)建 Spring MVCDispatcherServlet 核心組件,并且創(chuàng)建 2 個 WebApplication 上下文對象。

Spring 不能白學,是吧,工廠再厲害,你也得告訴它你要創(chuàng)建什么吧。大家還記得這些信息你原來是放在哪里的嗎?

想起來了吧,你是放在 XML 文件中的,本文則是放在 JAVA 類中。所以這 3 個方法中有 2 個方法是用來指定這 2 個上下文對象分別對應的配置類是誰。

知道原因了,立馬準備好 2 個配置類。

//web 上下文對象的配置類
@Configuration
@ComponentScan(basePackages = { "com.mk.web" }, excludeFilters = {
		@Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfig {
}
// Root 上下文對象的配置類
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.mk.web.action" })
public class WebConfig {

}

這里有 3 個注解需要說明 一下:

  • @Configuration 注解:說明這個類是配置類;

Tips: 配置類用來替代 XML 配置文件。

  • @EnableWebMvc 注解: 很好理解,啟動 Spring MVC 相關(guān)功能;

  • @ComponentScan 注解: 指定上下文對象各自負責的組件所在包。

Tips: Root 配置類中需要排除 Web 配置類負責的區(qū)域。

在重新完善 WebInitializer 類之前,說明一下,另一個方法是用來指定前端控制器可以響應的請求地址。OK!讓我們再來看看這 3 個方法本來應該的樣子:

@Override
protected Class<?>[] getRootConfigClasses() {	
	return new Class[] { RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class};
}
//接受所有請求
@Override
protected String[] getServletMappings() {
	return new String[] {"/"};
}

3.3 項目測試

經(jīng)過這一番折騰后,Spring MVC 項目的基礎(chǔ)架構(gòu)就完成了,把項目部署到服務器(tomcat)中。查看 tomcat 啟動時的輸出日志中是否存在下面的信息。如果存在,表示 Spring MVC 項目初始化成功。

圖片描述

在瀏覽器的地址欄中輸入:http://localhost:8888/sm-demo/

Tips: 我的端口號是 8888。

如果瀏覽器中輸出 Hello World ,恭喜,咱們?nèi)〉昧耸褂?Spring MVC 第一階段的成功。

4.視頻演示

5. 小結(jié)

本節(jié)課程和大家一起聊了聊如何使用純 JAVA 的方式搭建 Spring MVC 項目 。

通過本章節(jié)的學習,大家一定要記住 DispatcherServlet 這個核心組件,并要理解 Spring MVC 項目中為什么需要 2 個 WebApplicationContext 一起工作的。并深深地記住 JAVA 配置相關(guān)的幾個注解。