SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄(第十一天)初識SpringMVC
今天我們要來學(xué)習(xí)一下SSM框架的最后一個(gè)框架SpringMVC
一、初認(rèn)SpringMVC
基本概念:
? Spring MVC(Model-View-Controller)是一個(gè)用于構(gòu)建Java Web應(yīng)用程序的開源框架,它提供了一種基于MVC架構(gòu)的方式來開發(fā)Web應(yīng)用。
? SpringMVC是Spring Framework的一部分,它是一種基于模型-視圖-控制器(MVC)設(shè)計(jì)模式的Web框架。它的主要目標(biāo)是將應(yīng)用程序的各個(gè)部分(模型、視圖和控制器)分離開來,以提高代碼的可維護(hù)性和可測試性。SpringMVC提供了一個(gè)結(jié)構(gòu)良好的方式來處理HTTP請求和響應(yīng),同時(shí)支持靈活的配置和擴(kuò)展。
在這篇博客中,我們將初步了解Spring MVC的核心概念和基本用法。
Java EE三層架構(gòu)
我們前幾天經(jīng)常提及的系統(tǒng)經(jīng)典的三層架構(gòu)模式:
- 表現(xiàn)層(Controller層):也被稱為視圖層,負(fù)責(zé)接受客戶端請求,并向客戶端響應(yīng)結(jié)果。
- 業(yè)務(wù)層(Service層):也成為服務(wù)層,負(fù)責(zé)處理業(yè)務(wù)邏輯,與項(xiàng)目需求相關(guān)。
- 持久層(Dao層):負(fù)責(zé)數(shù)據(jù)的持久化和訪問數(shù)據(jù)庫進(jìn)行增刪改查。
那么SpringMVC在三層架構(gòu)中是作用于哪層呢?
從該圖也可以看出SpringMVC作用于三層架構(gòu)中的表現(xiàn)層,用于接收客戶端請求并進(jìn)行響應(yīng)。
SpringMVC的作用流程
? Spring MVC中包含了控制器
和視圖
,控制器
接收到客戶端的請求后對請求數(shù)據(jù)進(jìn)行解析和封裝,接著將請求交給業(yè)務(wù)層
處理。業(yè)務(wù)層
會對請求進(jìn)行處理,最后將處理結(jié)果返回給表現(xiàn)層
。表現(xiàn)層
接收到業(yè)務(wù)層
的處理結(jié)果后,再由視圖
對處理結(jié)果進(jìn)行渲染,渲染完成后響應(yīng)給客戶端。
SpringMVC的優(yōu)點(diǎn)
- 是Spring框架的后續(xù)產(chǎn)品,可以方便地使用Spring框架所提供的其他功能。
- 使用簡單,很容易設(shè)計(jì)出干凈簡潔的Web層。
- 支持各種請求資源的映射策略。
- 具有非常靈活的數(shù)據(jù)驗(yàn)證、格式化和數(shù)據(jù)綁定機(jī)制,能使用任何對象進(jìn)行數(shù)據(jù)綁定,不必實(shí)現(xiàn)特定框架的API。
- 支持國際化,可以根據(jù)用戶區(qū)域顯示多國語言。
- 支持多種視圖技術(shù),它支持JSP、Velocity和FreeMarker等視圖技術(shù)。
- 靈活性強(qiáng),易擴(kuò)展。
SpringMVC的核心組件
- DispatcherServlet(派發(fā)器Servlet):DispatcherServlet是SpringMVC的前端控制器,它接收所有的HTTP請求并將請求路由到適當(dāng)?shù)目刂破魈幚沓绦?/strong>。
-
Controller(控制器):控制器處理程序是SpringMVC應(yīng)用程序的核心部分,它負(fù)責(zé)處理HTTP請求并返回適當(dāng)?shù)捻憫?yīng)。控制器通常是POJO(普通Java對象)類,使用
@Controller
注解進(jìn)行標(biāo)記。 - Model(模型):模型表示應(yīng)用程序的數(shù)據(jù)。它可以是一個(gè)普通的Java對象(POJO),也可以是一個(gè)包含業(yè)務(wù)邏輯的組件。
- View(視圖):視圖負(fù)責(zé)呈現(xiàn)模型數(shù)據(jù)并生成響應(yīng)。SpringMVC支持多種視圖技術(shù),包括JSP、Thymeleaf、FreeMarker等。
SpringMVC的基本工作原理流程如下:
- 客戶端發(fā)送HTTP請求到DispatcherServlet。
- DispatcherServlet根據(jù)請求映射信息將請求路由到適當(dāng)?shù)目刂破魈幚沓绦颉?/li>
- 控制器處理程序處理請求,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,并返回一個(gè)模型(Model)。
- DispatcherServlet選擇一個(gè)視圖(View)來呈現(xiàn)模型數(shù)據(jù)。
- 視圖將模型數(shù)據(jù)呈現(xiàn)為HTML、JSON或其他響應(yīng)格式,并將其返回給客戶端。
- 客戶端接收并渲染視圖。
這里我們后面會使用實(shí)例來幫助理解這個(gè)流程。
二、新建SpringMVC入門程序
? 這里我們選擇使用昨天的項(xiàng)目來做今天的實(shí)驗(yàn),有去下載我昨天的項(xiàng)目資源的讀者應(yīng)該就會發(fā)現(xiàn)我的pom中引入了很多的依賴,其實(shí)是一個(gè)全棧項(xiàng)目的所有依賴,所以會比較多,依賴的引入也是非常重要的,不同版本的依賴之間可能會有沖突,所以需要我們掌握,查看報(bào)錯(cuò)并且根據(jù)報(bào)錯(cuò)修改的能力,跟debug原理是一樣的。
使用Maven創(chuàng)建JavaWeb項(xiàng)目
①我們可以選擇新建一個(gè)Java Web項(xiàng)目又或者在昨天的基礎(chǔ)上添加一個(gè)webapp文件夾(請按照下圖流程進(jìn)行操作)
這里要進(jìn)行一下修改,修改webapp文件夾的地址還有告訴程序Web資源的目錄在哪
按照下面流程去進(jìn)行新增artifact
然后點(diǎn)擊Apply即可,到此我們的webapp就新建完成了
整體項(xiàng)目架構(gòu)如下:
②引入Maven依賴,引入項(xiàng)目所需要的全部依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>samTest</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 設(shè)置打包類型為 WAR -->
<packaging>war</packaging>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Tomcat7插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>GBK</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- AOP 依賴 -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- AspectJ 依賴,用于AspectJ方式的AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<!-- DBCP數(shù)據(jù)庫連接池依賴 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 連接池依賴 -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<!-- Hamcrest測試框架依賴 -->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
</dependency>
<!-- JavaEE API依賴 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- JSTL標(biāo)簽庫依賴 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- JUnit測試框架依賴 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- Log4j日志框架依賴 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- MyBatis ORM框架依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
<!-- MyBatis Spring整合依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- MySQL連接驅(qū)動依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- Spring AOP依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring Aspects依賴,為AspectJ整合 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring Bean依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring Context依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring Core依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring Expression Language依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring JDBC依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring TX依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring MVC依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring MVC依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
</dependencies>
</project>
? PS:這里引入的maven的插件,還引入了tomcat插件,設(shè)置了項(xiàng)目打包方式為war,這樣才可以被maven識別,并且使得我們可以使用maven方式直接運(yùn)行Java Web應(yīng)用。跟項(xiàng)目部署在Tomcat服務(wù)器是一樣的效果。
? 接下來要去進(jìn)行設(shè)置才可以使用插件運(yùn)行Maven項(xiàng)目,單擊IDEA工具欄中的“Run”→“Edit Configurations…”選項(xiàng),彈出Run/Debug Configurations對話框。
②配置前端控制器,在web.xml文件中進(jìn)行SpringMVC前端控制器的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--設(shè)置default.jsp為首頁歡迎頁面-->
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springmvc</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>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
這里稍微解釋一下代碼吧:
? 以上代碼的簡單說明: welcome-file-lis****表示首頁歡迎頁面
? 在上述代碼中,我們配置了一個(gè)名為“springmvc”的Servlet。該Servlet是Dispatcher Servlet類型,它就是Spring MVC的入口(前面介紹過SpringMVC的本質(zhì)就是一個(gè)Servlet),并通過“<load-on-startup>
1</load-on-startup>
”配置標(biāo)記容器在啟動的時(shí)候就加載此Dispatcher Servlet,即自動啟動。然后通過servlet-mapping映射到“/”,即Dispatcher Servlet需要截獲并處理該項(xiàng)目的所有URL請求。
? 在配置Dispatcher Servlet的時(shí)候,通過設(shè)置context Config Location參數(shù)來指定Spring MVC配置文件的位置,此處使用Spring資源路徑的方式進(jìn)行指定(classpath:springmvc-servlet.xml,下一步將創(chuàng)建這個(gè)文件)。
如下圖,這里會爆紅就因?yàn)槲覀冞€沒有創(chuàng)建SpringMVC的配置文件:spring-mvc.xml,我這里圖片是我還未修改的版本,記得自行修改即可
③在resource資源文件夾下創(chuàng)建spring-mvc.xml,配置處理器映射信息和視圖解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
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">
<!--這段配置會自動掃描指定包中的類,查找?guī)в?Spring 注解(如 @Controller、@Service、@Repository 等)的類,并將它們注冊為 Spring Bean。-->
<context:component-scan base-package="controller"/>
<!--配置 Spring MVC,以便啟用注解驅(qū)動的控制器和處理器映射。當(dāng)啟用此配置時(shí),Spring MVC 將識別和處理與請求映射相關(guān)的注解,例如 @RequestMapping,并自動配置一些默認(rèn)的行為,如請求參數(shù)綁定和視圖解析等。-->
<mvc:annotation-driven/>
<!-- 完成視圖的對應(yīng) -->
<!-- 對轉(zhuǎn)向頁面的路徑解析。prefix:前綴, suffix:后綴 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
如下圖:這里爆紅是因?yàn)槲覀冞€沒有創(chuàng)建controller包,創(chuàng)建了controller包記得要修改這個(gè)配置掃描的包的路徑,比如我的就是com.steveDash.controller
④創(chuàng)建controller包,新建我們的控制處理器UserController,用于處理客戶端請求并指定響應(yīng)跳轉(zhuǎn)的頁面。
package com.steveDash.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
//設(shè)置當(dāng)前方法的訪問映射地址
@RequestMapping("/hello")
//設(shè)置當(dāng)前方法返回值類型為String,用于指定請求完成后跳轉(zhuǎn)的頁面
public String sayHello(){
System.out.println("歡迎訪問UserController");
return "success";
}
}
這里我們在JavaBean的章節(jié)就已經(jīng)說過了,@Controller標(biāo)注出這是個(gè)Controller層的Bean
要是有疑惑的,可以去看看前面幾篇文章。
⑤創(chuàng)建視圖View頁面,在webapp/WEB-INF/下創(chuàng)建pages文件夾,然后再創(chuàng)建success.jsp文件
為什么要是這個(gè)路徑呢?因?yàn)槲覀冊趕pring-mvc中已經(jīng)設(shè)置好了路徑,要是自己有修改的話,那就記得保持倆個(gè)路徑一致即可
然后創(chuàng)建success.jsp頁面代碼如下
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/12
Time: 23:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SteveDash</title>
</head>
<body>
<h1>你好呀,SteveDash的讀者們</h1>
</body>
</html>
⑥啟動項(xiàng)目,測試應(yīng)用:使用插件運(yùn)行maven項(xiàng)目了
如下圖:一般出現(xiàn)這個(gè)就是說明正常啟動了,我們需要去網(wǎng)頁輸入http://localhost:8080/hello
這里的http://localhost:8080/是我們自己設(shè)定好的Tomcat默認(rèn)主頁地址,8080是我們pom中對tomcat設(shè)置好的端口號,后面的hello是我們UserController中設(shè)定好的訪問地址
return success就是接收到這個(gè)http://localhost:8080/hello頁面請求,返回success.jsp,為什么會自動拼接.jsp呢?
因?yàn)槲覀冊趕pring-mvc.xml中設(shè)置好了,識別好了跳轉(zhuǎn)頁面路徑,所以上面返回的拼接完成就是
webapp/WEB-INF/pages/success
.jsp
三、Spring MVC工作原理詳解
在我們前面已經(jīng)粗略的講解了一下流程,又編寫了一個(gè)簡單的實(shí)例來幫助我們理解SpringMVC。
現(xiàn)在回過頭我們再來詳細(xì)理解一下SpringMVC的工作原理和執(zhí)行流程
可能會有疑惑,到底是怎么根據(jù)請求來找到對應(yīng)的控制器呢?
這里要引入這幾個(gè)組件
- 處理器映射器(Handler Mapping):它的主要任務(wù)是根據(jù)客戶端的請求,找到并映射到對應(yīng)的控制器。處理器映射器負(fù)責(zé)決定哪個(gè)控制器(Controller)應(yīng)該處理特定的請求。它根據(jù)請求的URL、請求方法、請求參數(shù)等條件,將請求映射到合適的控制器處理方法上。可以把它理解成一個(gè)Map<URL,Controller>,根據(jù)用戶請求的URL找到對應(yīng)的控制器。
- 處理適配器(Handler Adapter):處理適配器的作用是將請求分派給具體的控制器方法,并負(fù)責(zé)適配不同類型的處理器(例如,控制器類或注解控制器方法)。處理適配器根據(jù)控制器的類型和方法簽名來調(diào)用相應(yīng)的控制器方法。執(zhí)行實(shí)際的控制器方法,負(fù)責(zé)處理請求參數(shù)、方法調(diào)用和響應(yīng)返回。
- 視圖解析器(View Resolver):視圖解析器用于解析控制器方法返回的邏輯視圖名稱,將其轉(zhuǎn)換為實(shí)際的視圖對象。視圖解析器決定了如何呈現(xiàn)模型數(shù)據(jù),通常是將數(shù)據(jù)填充到模板(如JSP、Thymeleaf、FreeMarker等)中,生成最終的HTML響應(yīng)。說人話就是將控制器方法返回的視圖邏輯名稱解析為實(shí)際的視圖對象。它使您能夠?qū)⑦壿嬕晥D名稱映射到物理視圖(如JSP文件)。向我們上面解釋的一樣
所以這三個(gè)的關(guān)系就是:
這三個(gè)組件在Spring MVC中的關(guān)系如下:
? 處理器映射器和處理適配器一起工作,將請求路由到合適的控制器和方法上??刂破鞣椒▓?zhí)行業(yè)務(wù)邏輯,然后返回一個(gè)邏輯視圖名稱。視圖解析器接收邏輯視圖名稱,將其解析為一個(gè)具體的視圖對象。最終,視圖對象使用模型數(shù)據(jù)(由控制器方法提供)生成響應(yīng),這個(gè)響應(yīng)通常是HTML頁面。
? 這三個(gè)組件協(xié)作,實(shí)現(xiàn)了Spring MVC的核心功能,即將請求路由到控制器、執(zhí)行業(yè)務(wù)邏輯、生成視圖響應(yīng)。這種松散耦合和關(guān)注點(diǎn)分離的設(shè)計(jì)使得Spring MVC非常靈活和可擴(kuò)展。
Spring MVC執(zhí)行流程
這個(gè)圖源自網(wǎng)絡(luò),可以把處理器看成controller,這樣就可以理解了。
SpringMVC詳細(xì)的執(zhí)行流程如下:
- 客戶端發(fā)起請求:流程的起始點(diǎn)是客戶端發(fā)起HTTP請求,通常是在瀏覽器中輸入U(xiǎn)RL或點(diǎn)擊頁面鏈接。
- DispatcherServlet接收請求:請求首先到達(dá)Spring MVC的前端控制器,即DispatcherServlet(派發(fā)器Servlet)。
- 處理器映射器(Handler Mapping):DispatcherServlet 使用處理器映射器(Handler Mapping)來確定請求應(yīng)該由哪個(gè)控制器處理。處理器映射器將請求URL映射到具體的處理器(Controller)。
- 處理器適配器(Handler Adapter):一旦確定了處理器,DispatcherServlet 使用處理器適配器(Handler Adapter)來調(diào)用選定的處理器(Controller)。處理器適配器負(fù)責(zé)執(zhí)行控制器的方法,并傳遞請求的參數(shù)。
- 控制器處理請求:控制器是真正執(zhí)行業(yè)務(wù)邏輯的地方??刂破鞣椒ㄌ幚碚埱?,執(zhí)行相應(yīng)的操作,通常包括數(shù)據(jù)處理、業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問等。
- 模型數(shù)據(jù)準(zhǔn)備:在控制器方法中,可以準(zhǔn)備模型數(shù)據(jù),這些數(shù)據(jù)將在視圖中呈現(xiàn)。模型數(shù)據(jù)通常被封裝在一個(gè)Model對象中,并通過方法參數(shù)傳遞給視圖。
- 視圖解析器(View Resolver):一旦控制器處理完請求并準(zhǔn)備好模型數(shù)據(jù),DispatcherServlet 使用視圖解析器(View Resolver)來確定使用哪個(gè)視圖來呈現(xiàn)響應(yīng)。視圖解析器將邏輯視圖名稱映射到具體的視圖模板。
- 視圖渲染:選定了視圖后,視圖負(fù)責(zé)將模型數(shù)據(jù)渲染到最終的HTML或其他格式中,以生成響應(yīng)內(nèi)容。
- 響應(yīng)返回給客戶端:DispatcherServlet 將視圖生成的響應(yīng)返回給客戶端,通常是瀏覽器。
- 請求處理結(jié)束:流程結(jié)束,客戶端收到響應(yīng),請求處理完成。
? PS:這里講解的是SpringMVC4.0以后版本的執(zhí)行流程。
總結(jié)
? 今天我們對SpringMVC的基礎(chǔ)知識做了整體的了解,也明白了SpringMVC的概念,也編寫了SpringMVC的入門程序,通過這個(gè)實(shí)例對SpringMVC的工作原理,執(zhí)行流程進(jìn)行了詳細(xì)的講解。MVC三層架構(gòu)的作用,它們之間是怎么互相協(xié)調(diào)的。還學(xué)習(xí)了部署項(xiàng)目的倆種方式,本地Tomcat運(yùn)行,或者使用插件運(yùn)行Maven項(xiàng)目。通過今天的學(xué)習(xí),希望各位讀者可以對SpringMVC有個(gè)大致的了解,為框架開發(fā)打下堅(jiān)實(shí)基礎(chǔ)。
? 想要跟著學(xué)習(xí)的可以去我的資源里面找對應(yīng)的文件下載,我的md文件也會發(fā)上去,項(xiàng)目文件會上傳可以自己跟著學(xué)習(xí)一下。
作者:Stevedash文章來源:http://www.zghlxwxcb.cn/news/detail-733272.html
發(fā)表于:2023年9月13日 3點(diǎn)32分文章來源地址http://www.zghlxwxcb.cn/news/detail-733272.html
注:本文內(nèi)容基于個(gè)人學(xué)習(xí)理解,如有錯(cuò)誤或疏漏,歡迎指正。感謝閱讀!如果覺得有幫助,請點(diǎn)贊和分享。
到了這里,關(guān)于(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!