最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot與SpringMVC第一講

 更新時(shí)間:2024年05月16日 10:06:49   作者:Achlorine  
SpringMVC全名應(yīng)該叫做SpringWebMVC,它其實(shí)是基于servlet來(lái)構(gòu)建的一個(gè)原始web框架從一開(kāi)始就包含在了spring框架中,下面通過(guò)實(shí)例代碼給大家介紹SpringBoot與SpringMVC的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

什么是springMVC

SpringMVC

首先想要知道什么是SpringMVC我們就要先知道它的意思,首先什么是MVC呢?MVC即

模型,視圖,控制器

其實(shí)SpringMVC全名應(yīng)該叫做SpringWebMVC,它其實(shí)是基于servlet來(lái)構(gòu)建的一個(gè)原始web框架從一開(kāi)始就包含在了spring框架中。
那么通過(guò)上面的介紹我們知道SpringMVC的兩個(gè)基本信息

第一個(gè):它是一個(gè)web礦建

第二個(gè):它是基于servlet的api構(gòu)建出的一個(gè)框架

什么是模型、視圖、控制器

模型視圖控制器其實(shí)是我們軟件架構(gòu)模式中的一種,它把軟件系統(tǒng)分為了這三個(gè)部分我們來(lái)分別進(jìn)行解析一下

Model(模型):是應(yīng)用程序中負(fù)責(zé)存取程序和數(shù)據(jù)邏輯的部分,一般是在數(shù)據(jù)庫(kù)中負(fù)責(zé)數(shù)據(jù)的存取
Controller(控制器):是應(yīng)用程序中負(fù)責(zé)用戶(hù)交互的部分通??刂破髫?fù)責(zé)從視圖中讀取,用戶(hù)需要的數(shù)據(jù)并返回給用戶(hù)。
View(視圖):是應(yīng)用程序中用來(lái)顯示出數(shù)據(jù)的部分通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。

MVC和SpringMVC的關(guān)系

我們上面說(shuō)到MVC其實(shí)是實(shí)現(xiàn)一個(gè)應(yīng)用的一種架構(gòu),那么SpringMVC呢?其實(shí)就是對(duì)這種架構(gòu)的具體實(shí)現(xiàn),也就是說(shuō)MVC是一種思想,SpringMVC是實(shí)現(xiàn)這種思想的其中一種方式,

SpringMVC的使用

那么我們說(shuō)了既然SpringMVC是一個(gè)web框架,并且還是MVC架構(gòu)的一種實(shí)現(xiàn),并且還是基于servlet的API創(chuàng)造出的,那么我們代入一下,學(xué)習(xí)Servlet的過(guò)程,我們可以推測(cè)出他肯定也是獲取連接,并且根據(jù)連接請(qǐng)求,建立與數(shù)據(jù)庫(kù)的交互并且返回?cái)?shù)據(jù),那么Servlet是根據(jù)@WebServlet(“/xxx”)來(lái)進(jìn)行解析連接的,那么SpringMVC是怎么使用的呢?我們來(lái)看一下。

第一個(gè)SpringMVC程序

首先我們先寫(xiě)一個(gè)類(lèi)

@RestController
public class hello {
}

我們來(lái)看一下映入眼簾中的第一個(gè)讓我們懵逼的東西那就是這個(gè)類(lèi)上的注解@RestController,我們接下來(lái)就來(lái)解釋一下這個(gè)注解

@RestController

什么是@RestController呢?他是一個(gè)注解,或者說(shuō)叫做組合注解,那么我們先搞懂一個(gè)概念,什么是注解?

什么是注解

我們可以類(lèi)比于注釋的概念去理解,這兩者最大的區(qū)別就是注釋主要是給人看的,而注解是給機(jī)器看的,比如說(shuō)我們?cè)趯W(xué)習(xí)多態(tài)那里的時(shí)候如果細(xì)心的同學(xué)應(yīng)該在重寫(xiě)了父類(lèi)的方法子類(lèi)方法中見(jiàn)到過(guò)@Override這個(gè)注解,這個(gè)注解的作用就是告訴編譯器我的 這個(gè)方法是重寫(xiě)了父類(lèi)的方法,那么當(dāng)編譯器看到這個(gè)注解的時(shí)候他會(huì)多做一些事情,首先要做的就是要先看看你到底有沒(méi)有重寫(xiě)父類(lèi)的方法你要是沒(méi)有寫(xiě)那你就是欺騙我的感情,是渣男,渣女人渣,這時(shí)候編譯器直接不留情面的給你來(lái)個(gè)報(bào)錯(cuò)。那么專(zhuān)業(yè)些的說(shuō)法是什么呢?
注解是提供一種為程序元素設(shè)置元數(shù)據(jù)的方法,理解起來(lái)還是一樣的,程序元素就是指接口、類(lèi)、屬性、方法,這些都是屬于程序的元素,那啥叫元數(shù)據(jù)呢?就是描述數(shù)據(jù)的數(shù)據(jù)(data about data),舉個(gè)簡(jiǎn)單的例子,系統(tǒng)上有一個(gè)sm.png文件,這個(gè)文件才是我們真正需要的數(shù)據(jù)本身,而這個(gè)文件的屬性則可以稱(chēng)之為sm.png的元數(shù)據(jù),是用來(lái)描述png文件的創(chuàng)建時(shí)間、修改時(shí)間、分辨率等信息的,這些信息無(wú)論是有還是沒(méi)有都不影響它作為圖片的性質(zhì),都可以使用圖片軟件打開(kāi)。

那么@RestController到底是干嘛的呢?

我們有了上面概念的基礎(chǔ)我們?cè)賮?lái)說(shuō)一下,到底@RestController是干嘛的,他想告訴編譯器什么?大家不要急要想知道這個(gè)問(wèn)題我們要先搞明白,為什么說(shuō)他是組合注解它組合了誰(shuí),它組合 的就是@Controller和@ResponseBody兩個(gè)注解的功能。那么組合之后有什么功能呢?@RestController注解的類(lèi)接下來(lái)類(lèi)中的方法返回的數(shù)據(jù)都是json數(shù)據(jù),也就是說(shuō)當(dāng)我們使用了@RestController這個(gè)注解之后我們就不需要在要返回json數(shù)據(jù)的方法中添加@ResponseBody注解了。
那么接下來(lái)我們就要繼續(xù)寫(xiě)代碼了。

package com.example.test_spring2.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class hello {
    @RequestMapping("sayHi")
    public String hello(){
        return "hello Spring MVC";
    }
}

這一次我們加入了新的方法和注解那就是@RequestMapping那么接下來(lái)我們?cè)俅蝸?lái)學(xué)習(xí)一下這個(gè)注解

@RequestMapping

這個(gè)注解的作用是什么呢?這個(gè)注解的作用我們可以參考一下@WebServlet這個(gè)注解,我們知道@WebServlet這個(gè)注解是為了映射連接的說(shuō)白了我們想要訪問(wèn)被這個(gè)注解修飾的方法就必須要輸入這個(gè)注解中的值作為url,那么@RequestMapping也一樣也是為了去進(jìn)行地址映射的,那么這個(gè)注解除了修飾方法之外還能修飾類(lèi)嗎?答案是可以的。那么我們來(lái)寫(xiě)一個(gè)代碼試試把

package com.example.test_spring2.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/sayicll")
public class hello {
    @RequestMapping("sayHiIicll")
    public String hello(){
        return "hello Spring MVC";
    }
}

那么如果代碼這樣寫(xiě)的話(huà)我們的url該怎么寫(xiě)呢?如下

http://127.0.0.1:8080/sayicll/sayHiIicll

也就是說(shuō)我們需要先將描述類(lèi)的那層@RequestMapping寫(xiě)在前面然后寫(xiě)描述方法的@RequestMapping,此時(shí)可能就會(huì)用同學(xué)有疑問(wèn),既然這樣子的話(huà)那我發(fā)送什么請(qǐng)求可以被接收呢?我們來(lái)測(cè)試一下就可以了這里我們使用的軟件是postman

這里我們發(fā)現(xiàn)無(wú)論是get還是post請(qǐng)求我們都能發(fā)送別接受其返回,那么這時(shí)候可能會(huì)用同學(xué)有疑問(wèn)那么如果我就是想要讓他特定的接收其中一個(gè)請(qǐng)求怎么辦呢?當(dāng)然也可以,這就需要用到method了如下

@RestController
@RequestMapping("/sayicll")
public class hello {
    @RequestMapping(value = "sayHiIicll",method = RequestMethod.POST)
    public String hello(){
        return "hello Spring MVC";
    }
}

這就表示他只能使用post進(jìn)行那么還有別的形式嗎?也是有的如下代碼我們來(lái)構(gòu)建一下請(qǐng)求

@RestController
@RequestMapping("/sayicll")
public class hello {
    @PostMapping("helloIicll")
    public String hello(){
        return "hello Spring MVC";
    }
    @PostMapping("hiIicll")
    public String hi(){
        return "hi I i cll";
    }
}

那么如上這個(gè)注解就可以幫助我們這個(gè)方法只能,接收post請(qǐng)求那么我們按照相同的思路就能猜測(cè)到肯定有個(gè)注解叫做@GetMapping,那么這個(gè)注解肯定就是幫助我們的方法只能接收Get請(qǐng)求了。

如何接收來(lái)自請(qǐng)求中的querystrying

首先我們來(lái)看一下我們的后端代碼

 @RequestMapping("/h1")
    public String h1(String name){
        return "name="+name;
    }

有了上面的基礎(chǔ)我們來(lái)嘗試一下接收來(lái)自請(qǐng)求中querystring中的參數(shù),這里的參數(shù)如何獲取呢?其實(shí)也很簡(jiǎn)單就是保證我們這個(gè)方法中的參數(shù)和我們querystring中的參數(shù)一致這樣spring可以幫助我們自動(dòng)匹配,那么我們來(lái)看一下結(jié)果驗(yàn)證一下吧。


這里我們發(fā)現(xiàn)我們只需要做到前端的querystring和后端方法中設(shè)置的參數(shù)名一致就可以保證我們的請(qǐng)求序列中的參數(shù)被準(zhǔn)確的接收到了。那么假如說(shuō)我不希望和前端的保持一致呢?也就是我如何才能跟前端發(fā)給我的參數(shù)名稱(chēng)進(jìn)行重命名呢?這時(shí)候就需要學(xué)習(xí)到一個(gè)新的注解了。

@RequestParam

我們來(lái)解釋一下@RequestParam這個(gè)注解,這個(gè)注解的作用就是重命名前端傳來(lái)的參數(shù),用法是如何呢?我們來(lái)看一下代碼

 @RequestMapping("/h1")
    public String h1(@RequestParam("name") String username){
        return "name="+username;
    }

我們來(lái)看一下結(jié)果如下圖

那么這時(shí)候我們來(lái)思考一個(gè)問(wèn)題那就是這里有什么不同呢?其實(shí)很明顯的一個(gè)就是我們的代碼中原來(lái)返回的是name現(xiàn)在返回的參數(shù)是username了,其實(shí)這就是因?yàn)閚ame是前端發(fā)送給我們的數(shù)據(jù)參數(shù),username才是我們后端自己命名的參數(shù)那么你想在后端代碼中使用這個(gè)值你肯定用的是自己定義的參數(shù)才對(duì)嘛。此外我們需要注意的是這樣寫(xiě)的話(huà)這個(gè)name就是一個(gè)必傳參數(shù),也就是說(shuō)必須要有這個(gè)name值才可以那么如果我不想設(shè)置這個(gè)參數(shù)呢?

 @RequestMapping("/h1")
    public String h1(@RequestParam(value = "name",required = false) String username){
        return "name="+username;
    }

這里我們只需要設(shè)置一下request=false就可以了。

@RequestMapping(“/m9/{userId}/{name}”)

這里我們想一下一些url的一些我們需要的屬性可能即不在query string中也不在body中而是在url中那么這時(shí)候我們?cè)撛趺崔k呢?這里 @RequestMapping給我們提供了更多的用法也就是上面的那種我們只需要將我們需要的參數(shù)提前在 @RequestMapping中設(shè)置好就可以了,此外我們還需要搭配著另外的一個(gè)屬性,@PathVariable 進(jìn)行使用那么代碼如下

  @RequestMapping("/m9/{userId}/{name}")
    public String m9(@PathVariable Integer userId,@PathVariable("name") String userame){
        return "userId:"+userId + ",userame:"+userame;
    }

到此這篇關(guān)于SpringBoot與SpringMVC第一講的文章就介紹到這了,更多相關(guān)SpringBoot與SpringMVC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用SpringSecurity處理CSRF攻擊的方法步驟

    使用SpringSecurity處理CSRF攻擊的方法步驟

    這篇文章主要介紹了使用SpringSecurity處理CSRF攻擊的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Java快速轉(zhuǎn)C#的簡(jiǎn)明教程

    Java快速轉(zhuǎn)C#的簡(jiǎn)明教程

    最近正在研究將一個(gè)純java工程如何轉(zhuǎn)換成C#工程,代碼量還比較大,這里記錄一番,這篇文章主要介紹了Java快速轉(zhuǎn)C#的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例

    Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例

    面對(duì)復(fù)雜多變的業(yè)務(wù)需求,動(dòng)態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 實(shí)例分析Java Class的文件結(jié)構(gòu)

    實(shí)例分析Java Class的文件結(jié)構(gòu)

    今天把之前在Evernote中的筆記重新整理了一下,發(fā)上來(lái)供對(duì)java class 文件結(jié)構(gòu)的有興趣的同學(xué)參考一下
    2013-04-04
  • Java基礎(chǔ)之?dāng)?shù)組詳解

    Java基礎(chǔ)之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    近年來(lái),二維碼的使用越來(lái)越風(fēng)生水起,本篇文章主要介紹了Java二維碼登錄流程實(shí)現(xiàn)代碼,其中包含短地址生成,有興趣的可以了解一下。
    2016-12-12
  • JDK8時(shí)間相關(guān)類(lèi)超詳細(xì)總結(jié)(含多個(gè)實(shí)例)

    JDK8時(shí)間相關(guān)類(lèi)超詳細(xì)總結(jié)(含多個(gè)實(shí)例)

    jdk1.8的一些新特性簡(jiǎn)化了代碼的寫(xiě)法,減少了部分開(kāi)發(fā)量,下面這篇文章主要給大家介紹了關(guān)于JDK8時(shí)間相關(guān)類(lèi)超詳細(xì)總結(jié),文中包含了多個(gè)實(shí)例代碼,需要的朋友可以參考下
    2023-01-01
  • SpringBoot XSS攻擊的常見(jiàn)形式與防范方法

    SpringBoot XSS攻擊的常見(jiàn)形式與防范方法

    XSS攻擊是指攻擊者在Web頁(yè)面的輸入數(shù)據(jù)中插入惡意腳本,當(dāng)其他用戶(hù)瀏覽該頁(yè)面時(shí),這些腳本就會(huì)在用戶(hù)的瀏覽器上執(zhí)行,可能導(dǎo)致信息泄露、會(huì)話(huà)劫持、惡意操作等安全風(fēng)險(xiǎn),本文給大家介紹了SpringBoot XSS攻擊的常見(jiàn)形式與防范方法,需要的朋友可以參考下
    2024-11-11
  • SpringBoot2.動(dòng)態(tài)@Value的實(shí)現(xiàn)方式

    SpringBoot2.動(dòng)態(tài)@Value的實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot2.動(dòng)態(tài)@Value的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java算法之重新排列數(shù)組例題

    Java算法之重新排列數(shù)組例題

    這篇文章主要介紹了Java算法之重新排列數(shù)組例題,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08

最新評(píng)論

喀喇沁旗| 霍林郭勒市| 兰溪市| 广昌县| 申扎县| 蓬安县| 固阳县| 利辛县| 万宁市| 定襄县| 安泽县| 湘乡市| 精河县| 涡阳县| 册亨县| 仲巴县| 定边县| 阳高县| 保定市| 保山市| 两当县| 德江县| 百色市| 宣汉县| 铅山县| 台南市| 石阡县| 浙江省| 通渭县| 南丹县| 罗山县| 柳河县| 临沂市| 蛟河市| 洞口县| 磐石市| 甘肃省| 藁城市| 定安县| 苍溪县| 巨鹿县|