国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄

這篇具有很好參考價(jià)值的文章主要介紹了(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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 SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

從該圖也可以看出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)
  1. Spring框架的后續(xù)產(chǎn)品,可以方便地使用Spring框架所提供的其他功能
  2. 使用簡單,很容易設(shè)計(jì)出干凈簡潔的Web層
  3. 支持各種請求資源的映射策略。
  4. 具有非常靈活的數(shù)據(jù)驗(yàn)證、格式化數(shù)據(jù)綁定機(jī)制,能使用任何對象進(jìn)行數(shù)據(jù)綁定,不必實(shí)現(xiàn)特定框架的API。
  5. 支持國際化,可以根據(jù)用戶區(qū)域顯示多國語言。
  6. 支持多種視圖技術(shù),它支持JSP、Velocity和FreeMarker等視圖技術(shù)。
  7. 靈活性強(qiáng),易擴(kuò)展

SpringMVC的核心組件
  1. DispatcherServlet(派發(fā)器Servlet)DispatcherServlet是SpringMVC的前端控制器,它接收所有的HTTP請求并將請求路由到適當(dāng)?shù)目刂破魈幚沓绦?/strong>。
  2. Controller(控制器):控制器處理程序是SpringMVC應(yīng)用程序的核心部分,它負(fù)責(zé)處理HTTP請求并返回適當(dāng)?shù)捻憫?yīng)。控制器通常是POJO(普通Java對象)類,使用@Controller注解進(jìn)行標(biāo)記。
  3. Model(模型)模型表示應(yīng)用程序的數(shù)據(jù)。它可以是一個(gè)普通的Java對象(POJO),也可以是一個(gè)包含業(yè)務(wù)邏輯的組件
  4. View(視圖)視圖負(fù)責(zé)呈現(xiàn)模型數(shù)據(jù)并生成響應(yīng)。SpringMVC支持多種視圖技術(shù),包括JSP、Thymeleaf、FreeMarker等。

SpringMVC的基本工作原理流程如下:
  1. 客戶端發(fā)送HTTP請求到DispatcherServlet。
  2. DispatcherServlet根據(jù)請求映射信息將請求路由到適當(dāng)?shù)目刂破魈幚沓绦颉?/li>
  3. 控制器處理程序處理請求,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,并返回一個(gè)模型(Model)。
  4. DispatcherServlet選擇一個(gè)視圖(View)來呈現(xiàn)模型數(shù)據(jù)。
  5. 視圖將模型數(shù)據(jù)呈現(xiàn)為HTML、JSON或其他響應(yīng)格式,并將其返回給客戶端。
  6. 客戶端接收并渲染視圖。

這里我們后面會使用實(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)行操作)

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

這里要進(jìn)行一下修改,修改webapp文件夾的地址還有告訴程序Web資源的目錄在哪

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

按照下面流程去進(jìn)行新增artifact

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

然后點(diǎn)擊Apply即可,到此我們的webapp就新建完成了

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

整體項(xiàng)目架構(gòu)如下:

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc


②引入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對話框。

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

②配置前端控制器,在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,我這里圖片是我還未修改的版本,記得自行修改即可(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

③在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

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

④創(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è)路徑一致即可

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

然后創(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)目了

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

如下圖:一般出現(xiàn)這個(gè)就是說明正常啟動了,我們需要去網(wǎng)頁輸入http://localhost:8080/hello

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

這里的http://localhost:8080/是我們自己設(shè)定好的Tomcat默認(rèn)主頁地址,8080是我們pom中對tomcat設(shè)置好的端口號,后面的hello是我們UserController中設(shè)定好的訪問地址

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

return success就是接收到這個(gè)http://localhost:8080/hello頁面請求,返回success.jsp,為什么會自動拼接.jsp呢?

因?yàn)槲覀冊趕pring-mvc.xml中設(shè)置好了,識別好了跳轉(zhuǎn)頁面路徑,所以上面返回的拼接完成就是

webapp/WEB-INF/pages/success.jsp

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc


三、Spring MVC工作原理詳解

在我們前面已經(jīng)粗略的講解了一下流程,又編寫了一個(gè)簡單的實(shí)例來幫助我們理解SpringMVC。

現(xiàn)在回過頭我們再來詳細(xì)理解一下SpringMVC的工作原理和執(zhí)行流程

可能會有疑惑,到底是怎么根據(jù)請求來找到對應(yīng)的控制器呢?

這里要引入這幾個(gè)組件

  1. 處理器映射器(Handler Mapping):它的主要任務(wù)是根據(jù)客戶端的請求,找到并映射到對應(yīng)的控制器。處理器映射器負(fù)責(zé)決定哪個(gè)控制器(Controller)應(yīng)該處理特定的請求。它根據(jù)請求的URL、請求方法、請求參數(shù)等條件,將請求映射到合適的控制器處理方法上。可以把它理解成一個(gè)Map<URL,Controller>,根據(jù)用戶請求的URL找到對應(yīng)的控制器。
  2. 處理適配器(Handler Adapter):處理適配器的作用是將請求分派給具體的控制器方法,并負(fù)責(zé)適配不同類型的處理器(例如,控制器類或注解控制器方法)。處理適配器根據(jù)控制器的類型和方法簽名來調(diào)用相應(yīng)的控制器方法。執(zhí)行實(shí)際的控制器方法,負(fù)責(zé)處理請求參數(shù)、方法調(diào)用和響應(yīng)返回。
  3. 視圖解析器(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í)行流程

(第十一天)初識SpringMVC SSM框架的學(xué)習(xí)與應(yīng)用(Spring + Spring MVC + MyBatis)-Java EE企業(yè)級應(yīng)用開發(fā)學(xué)習(xí)記錄,JAVA企業(yè)級應(yīng)用開發(fā)必學(xué)框架,SSM框架的學(xué)習(xí),學(xué)習(xí),spring,mvc

這個(gè)圖源自網(wǎng)絡(luò),可以把處理器看成controller,這樣就可以理解了。

SpringMVC詳細(xì)的執(zhí)行流程如下:
  1. 客戶端發(fā)起請求:流程的起始點(diǎn)是客戶端發(fā)起HTTP請求,通常是在瀏覽器中輸入U(xiǎn)RL或點(diǎn)擊頁面鏈接。
  2. DispatcherServlet接收請求:請求首先到達(dá)Spring MVC的前端控制器,即DispatcherServlet(派發(fā)器Servlet)。
  3. 處理器映射器(Handler Mapping):DispatcherServlet 使用處理器映射器(Handler Mapping)來確定請求應(yīng)該由哪個(gè)控制器處理。處理器映射器將請求URL映射到具體的處理器(Controller)。
  4. 處理器適配器(Handler Adapter):一旦確定了處理器,DispatcherServlet 使用處理器適配器(Handler Adapter)來調(diào)用選定的處理器(Controller)。處理器適配器負(fù)責(zé)執(zhí)行控制器的方法,并傳遞請求的參數(shù)。
  5. 控制器處理請求:控制器是真正執(zhí)行業(yè)務(wù)邏輯的地方??刂破鞣椒ㄌ幚碚埱?,執(zhí)行相應(yīng)的操作,通常包括數(shù)據(jù)處理、業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問等。
  6. 模型數(shù)據(jù)準(zhǔn)備:在控制器方法中,可以準(zhǔn)備模型數(shù)據(jù),這些數(shù)據(jù)將在視圖中呈現(xiàn)。模型數(shù)據(jù)通常被封裝在一個(gè)Model對象中,并通過方法參數(shù)傳遞給視圖。
  7. 視圖解析器(View Resolver):一旦控制器處理完請求并準(zhǔn)備好模型數(shù)據(jù),DispatcherServlet 使用視圖解析器(View Resolver)來確定使用哪個(gè)視圖來呈現(xiàn)響應(yīng)。視圖解析器將邏輯視圖名稱映射到具體的視圖模板。
  8. 視圖渲染:選定了視圖后,視圖負(fù)責(zé)將模型數(shù)據(jù)渲染到最終的HTML或其他格式中,以生成響應(yīng)內(nèi)容。
  9. 響應(yīng)返回給客戶端:DispatcherServlet 將視圖生成的響應(yīng)返回給客戶端,通常是瀏覽器。
  10. 請求處理結(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

發(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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【80天學(xué)習(xí)完《深入理解計(jì)算機(jī)系統(tǒng)》】第十一天 3.4 跳轉(zhuǎn)指令

    【80天學(xué)習(xí)完《深入理解計(jì)算機(jī)系統(tǒng)》】第十一天 3.4 跳轉(zhuǎn)指令

    專注 效率 記憶 預(yù)習(xí) 筆記 復(fù)習(xí) 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區(qū)留言,一定盡快回復(fù)?。ù蠹铱梢匀タ次业膶?,是所有文章的目錄) 文章字體風(fēng)格: 紅色文字表示:重難點(diǎn)★? 藍(lán)色文字表示:思路以及想法★? 如果大家覺得有幫助的話,感謝大家?guī)?/p>

    2024年02月11日
    瀏覽(38)
  • 第七十一天學(xué)習(xí)記錄:對陳正沖編著《C 語言深度解剖》中關(guān)于1、2、4,5章作者留下部分問題的學(xué)習(xí)

    第七十一天學(xué)習(xí)記錄:對陳正沖編著《C 語言深度解剖》中關(guān)于1、2、4,5章作者留下部分問題的學(xué)習(xí)

    問:有如下代碼。 i 和 j 的值分別是什么,為什么? 答: 在這份代碼中,變量 i 和 j 分別是函數(shù) fun1 和 fun2 的靜態(tài)局部變量。靜態(tài)局部變量在函數(shù)內(nèi)部聲明,但在整個(gè)程序生命周期內(nèi)都存在,且只初始化一次(第一次進(jìn)入函數(shù)時(shí)初始化)。 在 main 函數(shù)中,fun1 和 fun2 分別被調(diào)

    2024年02月08日
    瀏覽(33)
  • 第五十一天打卡

    中等 1.5K company 微軟 Microsoft 給定一個(gè)整數(shù)數(shù)組prices,其中第 prices[i] 表示第 i 天的股票價(jià)格 。? 設(shè)計(jì)一個(gè)算法計(jì)算出最大利潤。在滿足以下約束條件下,你可以盡可能地完成更多的交易(多次買賣一支股票): 賣出股票后,你無法在第二天買入股票 (即冷凍期為 1 天)。 注意

    2023年04月09日
    瀏覽(26)
  • C語言(第三十一天)

    C語言(第三十一天)

    6. 調(diào)試舉例1 求1!+2!+3!+4!+...10!的和,請看下面的代碼: 調(diào)試找一下問題。 7. 調(diào)試舉例2 在VS2019、X86、Debug 的環(huán)境下,編譯器不做任何優(yōu)化的話,下面代碼執(zhí)行的結(jié)果是啥? 程序運(yùn)行,死循環(huán)了,調(diào)試看看為什么? 調(diào)試可以上面程序的內(nèi)存布局如下: ?1. 棧區(qū)內(nèi)存的使用習(xí)慣

    2024年02月11日
    瀏覽(25)
  • 代碼隨想錄第二十一天

    題目鏈接 : 二叉搜索樹的最小絕對差 自己的思路 :和驗(yàn)證二叉搜索樹一樣的思路!可以求每個(gè)相鄰節(jié)點(diǎn)的差值的絕對值,然后和之前的差值的絕對值進(jìn)行比較,取最小的為新的res;遞歸三部曲:1、傳入?yún)?shù):當(dāng)前節(jié)點(diǎn);2、終止條件:如果當(dāng)前節(jié)點(diǎn)為空,直接返回;3、單層遞

    2024年02月16日
    瀏覽(25)
  • node 第二十一天 webpack 初見

    為什么需要學(xué)習(xí)(了解)webpack webpack是前端工程化的基石,webpack又是基于node進(jìn)行文件打包bundle,所以作為前端起手學(xué)習(xí)node服務(wù)端開發(fā),同時(shí)學(xué)習(xí)webpack是很有必要的。 隨著vite的出現(xiàn),vue這一脈可能也許不再需要學(xué)習(xí)webpack了,但是需要知道的是, 打包一定是前端工程化繞不

    2024年01月16日
    瀏覽(26)
  • 學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】

    學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】

    ========================================================================= 相關(guān)代碼gitee自取 :C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 學(xué)C的第三十天【自定義類型:結(jié)構(gòu)體、枚舉、聯(lián)合】_高高的胖子的博客-CSDN博客 ?==============

    2024年02月15日
    瀏覽(29)
  • 谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    目錄 一、總述 二、前端部分 2.1 改良前端獲取分組列表接口及其調(diào)用 2.2 添加關(guān)聯(lián)的一整套邏輯 三、后端部分 四、總結(jié) 前端部分和之前的商品品牌添加分類差不多。 也是修改一下前端的分頁獲取列表的接口,還有就是加上關(guān)聯(lián)的那一套邏輯,包括基本構(gòu)件的引入、數(shù)據(jù)域的

    2024年02月13日
    瀏覽(104)
  • 從零開始的力扣刷題記錄-第六十一天

    題目描述: 給定由一些正數(shù)(代表長度)組成的數(shù)組 nums ,返回 由其中三個(gè)長度組成的、面積不為零的三角形的最大周長 。如果不能形成任何面積不為零的三角形,返回 0。 題解: 排序后從后往前遍歷,取最大的三個(gè)邊,如果滿足兩邊之和大于第三邊則返回,否則整體向前

    2024年02月09日
    瀏覽(25)
  • 從零開始的力扣刷題記錄-第五十一天

    題目描述: 給你一棵二叉搜索樹的 root ,請你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹,使樹中最左邊的節(jié)點(diǎn)成為樹的根節(jié)點(diǎn),并且每個(gè)節(jié)點(diǎn)沒有左子節(jié)點(diǎn),只有一個(gè)右子節(jié)點(diǎn)。 題解: 中序遍歷存儲節(jié)點(diǎn)后按順序連接即可 代碼(Go): 題目描述: 小扣在秋日市集發(fā)

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包