Spring Web MVC————入門(1)

今天開始正式帶大家學習Spring部分的內容了,大家嘗試去弄個專業版嗷,學習起來爽一點

在idea中下載這個插件就行了

我們之后開始創建Spring項目,

藍色 部分自己起名,type選Maven,其他的默認就好了,之后next,

勾選完點擊next,就創建好了;

看下項目結構,藍色java包中的就是我們寫代碼的地方,之間javaSE怎么寫現在就怎么寫,

resources是寫前端代碼的地方,或者可以存放靜態資源,test中可以測試代碼;

這個東東是啟動類,跟以往的main函數不同,這個類一但運行就不會停止的,我們是服務器開發,服務器哪有停下來的道理;準備工作完畢,開始無聊的理論;

1,什么是Spring Web MVC

Spring Web MVC是基于servlet API構建的原始框架,servlet是一種實現動態界面技術,反正Spring Web MVC就是一套Web開發框架,我們可以簡稱為Spring MVC;

1)什么是MVC

model view controller的縮寫,是一種軟件架構設計模式,分別為模型,視圖,控制器,

模型:就是我們的程序,怎么來處理業務邏輯,怎么處理數據

視圖:指應用程序專門用來與瀏覽器交互的部分

控制器:選擇處理模型,選擇視圖

2)什么是Spring MVC

Spring MVC就是實現了MVC模式的Web框架,有同學可能會有疑問,我們創建的不是Spring Boot項目嗎,為啥變成MVC項目了,可以這么理解,Spring Boot只是實現SpringMVC的一種方式,Spring Boot可以添加不同的依賴來實現不同的功能,添加MVC就能實現MVC的功能了;

2,學習MVC?

我們學習MVC主要學習通過瀏覽器和用戶交互的程序,主要分三個方面

建立連接:講用戶(瀏覽器)和java程序連接起來,就是訪問一個地址能調用我們的Spring程序

請求:用戶訪問會攜帶一些參數,在程序中我們要想辦法獲取到參數

響應:我們根據獲取到的參數,執行業務邏輯,并返回程序運行的結果

1,建立連接

我們這里就要使用到注解了,

我們剛才看到的這個就是啟動類的注解,

那么我們如何通過注解建立連接呢,創建一個類,

之后再類的上面寫RequestMapping("/hello"),這樣就能實現URL路由映射,達到瀏覽器連接程序的效果;

路由映射的意思就是用戶訪問URL之后,就會請求到應用程序某個類的某個方法中;

@RequestMapping("Hello")
@RestController
public class HelloController {@RequestMapping("m1")public static String m1(){return "Hello yaoyu";}
}

這個RestController,可以起到序列化數據的作用,把它變成json和xml格式,并且我們創建的這個類可能和Spring內置的重名,我們Spring項目中那么多的類,我們不可能每次啟動程序來把所有東西掃描一變來獲得我們要的類,所以加上這個控制器,就可以就掃描帶有控制器的類,啟動項目更快;?

第一個Hello是類路徑,第二個m1是方式路徑

類路徑+方法路徑合起來就是我們要的資源路徑了;

我們去瀏覽器來訪問程序:

我們輸入http://127.0.0.1:8080/Hello/m1

就能看到你好yaoyu了;

我們這里的RequestMapping是啥請求呢,我們之前學過,get,post,put,delete,我們使用html,form表單來請求一下;前端代碼我們放到

這個static下面,前端代碼:

<form action="http://127.0.0.1:8080/Hello/m1" method="post"><input type="submit" value="yaoyu">

?后端代碼:

@RequestMapping("Hello")
@RestController
public class HelloController {@RequestMapping("m1")public static String m1(){return "Hello yaoyu";}
}

啟動程序,看效果:

我們點擊它,

就跳轉到我們的程序了;這里為啥用127.0.0.1:8080,因為是我們同一臺電腦上寫服務器并且測試,就先用127.0.0.1就行;我們這里使用的post請求,瀏覽器發送的請求是get,所以這個RequestMapping是支持很多請求的;

但是我們可以指定方法

    @RequestMapping(value = "/m2",method = RequestMethod.GET)public static String m2(){return "我是get請求";}

來用postman訪問?

啥都不傳的get請求,看看效果:

得到結果了,那么我們使用post請求訪問會有問題嗎?

不行的,405是客戶端出錯,我們設定成get,客戶端使用post就會發生錯誤;

都是ok的,除此之外,我們還有專門的postMapping和getMapping來接收請求:
?

    @GetMapping("a1")public static String a1(){return "我是get請求";}@PostMapping("a2")public static String a2(){return "我是post請求";}

2,工具使用

那我們每次都要寫前端代碼好麻煩呀,我們后端程序員往后不就會更多的前端代碼了嗎,莫得事,我們有工具,我們可以使用postman,來構建請求;

下載好后打開,點擊那個create Collection,之后點擊藍色的Add,自己給自己的請求起名字,

接下來就能使用我們的工具了,

3,傳遞參數

1,普通傳參

就是查詢字符串傳參;

這個Params,下面以鍵值對的方式放到URL中

2,form-data

可以提交文件和圖片等?

4,form表單

5,raw

這些都是我們之前說的請求正文的內容;對應content-type大家還記得不;?

4,請求傳參

接下來我們重點來學習用postman傳遞參數并且用在后端中接收參數

1,傳遞單個參數

    @RequestMapping("/r1")public static String r1(String s){return "接收參數為" + s;}

來發請求,?

這里查詢字符串中的key就是s一定要和我們資源路徑里面方法參數的名字是一樣的,不然的話就找不到的;

再來看兩個代碼:

    @RequestMapping("/r2")public static Integer r2(Integer s){return s;}@RequestMapping("/r3")public static int r3(int s){return s;}

這倆有啥區別呢,一個使用包裝類型,一個是基本類型,我們使用基本類型的時候參數是必須傳的,因為基本類型不能為null,

傳遞是成功的,現在我們不傳參數:

?不可以因為int a不能為null,我們再試試Integer,?

?可以的,要是類型不匹配會發生400錯誤;

2,傳遞多個參數

    @RequestMapping("/r4")public static String r4(String s1,String s2){return "第一個參數" + s1 + ",第二個參數" + s2;}

3,傳遞對象

先創建一個對象:

public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}
    @RequestMapping("/r5")public static String r5(User user) {return user.toString();}

傳遞對象的時候就對對象內部的元素挨個賦值就行了,對象中有name和age,我們來傳遞?

?

4,參數綁定

?參數綁定,又叫參數重命名,參數映射,就是前端可能對參數進行加密,可能名字起的非常奇怪啊,那我們還要記一個小紙上嗎,顯然是不應該的,這里我們就使用參數綁定,對于前段加密復雜的參數我們讓他綁定一個易懂的參數名,我們使用RequestParam

    @RequestMapping("/r6")public static String r6(@RequestParam(value = "p",required = false) String s){return "接收的參數為"+ s;}

這里的required說明是不是必須傳的,我們默認是必須傳遞的,我們加一個false就可以不傳遞;

我們改成true

?我們在改回來:

ok了;?

5,傳遞數組

    @RequestMapping("/r7")public static String r7(String[] s){return Arrays.toString(s);}

這里可以有兩種方式來傳遞:

?可以用逗號分隔:

還可以

6,傳遞集合

傳遞集合的話我們得使用參數綁定,因為默認傳的是數組,

    @RequestMapping("/r8")public static String r8(@RequestParam List<Integer> list){return list.toString();}

7,傳遞json

這里我們要使用RequestBody,可以把傳遞來的json轉變為對象,

    @RequestMapping("/r9")public static String r9(@RequestBody User user){return user.toString();}

來個json的語法:

JSON的語法: 1. 數據在 鍵值對 (Key/Value) 中 2. 數據由逗號 , 分隔 3. 對象? {} 表? 4. 數組? [] 表? 5. 值可以為對象,也可以為數組,數組中可以包含多個對象 JSON的兩種結構 1. 對象:?括號 {} 保存的對象是?個?序的 鍵值對集合.?個對象以左括號 { 開始,右括號 } 結束。每個"鍵"后跟?個冒號 : ,鍵值對使?逗號 , 分隔 2. 數組:中括號 [] 保存的數組是值(value)的有序集合.?個數組以左中括號 [ 開始,右中括 號 ] 結束,值之間使?逗號 , 分隔;?

8,從URL中獲取參數

    @RequestMapping("/r10/{id}/{type}")public static String r10(@PathVariable Integer id,@PathVariable("type") Integer newType){return "獲取文章id"+id+",獲取文章類型"+newType;}

?PathVariable是路徑變量,可能有網站會把參數設置到路徑上,我們就要從路徑上拿參數,第一個id對應路徑上的id第二個我們把type這個參數名綁定為newtype

來看效果:

9,上傳文件

使用RequestPart注解:

    @RequestMapping("/r11")public static String r12(@RequestPart("file1") MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("C:/cctalk/java代碼容易犯錯的知識點/"+file.getOriginalFilename()));return "文還上傳成功";}

這個file1是我們前端傳入的參數我們把它綁定為file,我們要使用MultipartFile file,我們使用transferTo來快速上傳文件,這里跟我們之前學的文件操作是一樣的,就是進行了封裝,更好用了,

    @RequestMapping("/r11")public static String r12(@RequestPart("file1") MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("C:/cctalk/java代碼容易犯錯的知識點/"+file.getOriginalFilename()));return "文還上傳成功";}

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78659.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3 中用 canvas 封裝抽獎轉盤組件:設定中獎概率及獎項圖標和名稱

在 Web 應用開發中&#xff0c;抽獎功能是提升用戶參與度的常用手段。使用 Vue3 結合 canvas 技術&#xff0c;我們可以輕松實現一個高度自定義的抽獎轉盤組件&#xff0c;不僅能設定中獎概率&#xff0c;還能靈活配置獎項圖標和名稱。本文將詳細介紹該組件的實現原理、步驟&am…

Linux 硬盤和光驅系統管理

一、硬盤與目錄的容量 [rootwww ~]# df [-ahikHTm] [目錄或檔名] 選項與參數&#xff1a; -a &#xff1a;列出所有的檔案系統&#xff0c;包括系統特有的 /proc 等檔案系統&#xff1b; -k &#xff1a;以 KBytes 的容量顯示各檔案系統&#xff1b; -m &#xff1a;以 MByt…

2.Spring Boot中集成Guava Cache或者Caffeine

一、在Spring Boot(1.x版本)中集成Guava Cache 注意&#xff1a; Spring Boot 2.x用戶&#xff1a;優先使用Caffeine&#xff0c;性能更優且維護活躍。 1. 添加依賴 在pom.xml中添加Guava依賴&#xff1a; <dependency><groupId>com.google.guava</groupId&…

黑馬點評day02(緩存)

2、商戶查詢緩存 2.1 什么是緩存? 前言:什么是緩存? 就像自行車,越野車的避震器 舉個例子:越野車,山地自行車,都擁有"避震器",防止車體加速后因慣性,在酷似"U"字母的地形上飛躍,硬著陸導致的損害,像個彈簧一樣; 同樣,實際開發中,系統也需要"避震…

頭歌禁止復制怎么解除(簡單版)

被頭歌數據庫作業禁止復制整神之后&#xff0c;主啵嘗試網上各種解除方法&#xff0c;最后發現一個最簡單且最快速的解除方法。 在瀏覽器中搜索萬能復制插件 下載完成之后就可以隨便復制粘貼啦 超簡單 下載只需幾秒

【無基礎】小白解決Docker pull時報錯:https://registry-1.docker.io/v2/

Docker Compose 啟動失敗問題解決方案 錯誤描述 執行 docker compose up -d 時出現以下錯誤&#xff1a; [] Running 9/9? api Error context canceled …

【數據結構】二叉樹、堆

文章目錄 二叉樹的概念及結構定義特殊的二叉樹核心性質存儲方式 二叉樹的鏈式存儲前序遍歷中序遍歷后序遍歷層序遍歷 二叉樹的順序存儲父子關系的推導堆&#xff08;heap&#xff09;堆的概念向上調整算法和向下調整算法向上調整算法向下調整算法 堆的創建堆的插入堆的刪除 堆的…

Vue3響應式原理那些事

文章目錄 1 響應式基礎:Proxy 與 Reflect1.1 Proxy 代理攔截1.2 Reflect 確保 `this` 指向正確1.2.1 修正 `this` 指向問題1.2.2 統一的操作返回值1.3 與 Vue2 的對比2 依賴收集與觸發機制2.1 全局依賴存儲結構:WeakMap → Map → Set2.2 依賴收集觸發時機2.3 依賴收集核心實…

精選10個好用的WordPress免費主題

10個好用的WordPress免費主題 1. Astra Astra 是全球最受歡迎的WordPress免費主題。它功能豐富&#xff0c;易于使用&#xff0c;SEO友好&#xff0c;是第一個安裝量突破100萬的非默認主題&#xff0c;并獲得了5000多個五星好評。 它完美集成了Elementor、Beaver&#xff0c;…

【SaaS多租架構】數據隔離與性能平衡

SaaS多租戶架構:數據隔離與性能平衡 一、技術背景及發展二、技術特點:數據隔離與性能優化的雙核心三、技術細節:實現路徑與關鍵技術四、實際案例分析五、未來發展趨勢結語一、技術背景及發展 多租戶架構是云計算與SaaS(軟件即服務)模式的核心技術,其核心目標是通過共享基…

部署GM DC Monitor 一體化監控預警平臺

1&#xff09;首先在官網下載鏡像文件 廣目&#xff08;北京&#xff09;軟件有限公司廣目&#xff08;北京&#xff09;軟件有限公司https://www.gm-monitor.com/col.jsp?id1142&#xff09;其次進行部署安裝&#xff0c;教程如下&#xff1a; 1. 基礎環境要求 1) 系統&…

Webug4.0靶場通關筆記15- 第19關文件上傳(畸形文件)

目錄 第19關 文件上傳(畸形文件) 1.打開靶場 2.源碼分析 &#xff08;1&#xff09;客戶端源碼 &#xff08;2&#xff09;服務器源碼 3.滲透實戰 &#xff08;1&#xff09;構造腳本 &#xff08;2&#xff09;雙寫繞過 &#xff08;3&#xff09;訪問腳本 本文通過《…

架構思維:構建高并發讀服務_熱點數據查詢的架構設計與性能調優

文章目錄 一、引言二、熱點查詢定義與場景三、主從復制——垂直擴容四、應用內前置緩存4.1 容量上限與淘汰策略4.2 延遲刷新&#xff1a;定期 vs. 實時4.3 逃逸流量控制4.4 熱點發現&#xff1a;被動 vs. 主動 五、降級與限流兜底六、前端&#xff0f;接入層其他應對七、模擬壓…

寶塔面板運行docker的jenkins

1.在寶塔面板裝docker&#xff0c;以及jenkins 2.ip:端口訪問jenkins 3.獲取密鑰&#xff08;點擊日志&#xff09; 4.配置容器內的jdk和maven環境&#xff08;直接把jdk和maven文件夾放到jenkins容器映射的data文件下&#xff09; 點擊容器-->管理-->數據存儲卷--.把相…

C語言 ——— 函數

目錄 函數是什么 庫函數 學習使用 strcpy 庫函數 自定義函數 寫一個函數能找出兩個整數中的最大值 寫一個函數交換兩個整型變量的內容 牛刀小試 寫一個函數判斷一個整數是否是素數 寫一個函數判斷某一年是否是閏年 寫一個函數&#xff0c;實現一個整型有序數組的二分…

筆記本電腦升級計劃(2017———2025)

ThinkPad T470 (2017) vs ThinkBook 16 (2025) 完整性能對比報告 一、核心硬件性能對比 1. CPU性能對比&#xff08;i5-7200U vs Ultra9-285H&#xff09; 參數i5-7200U (2017)Ultra9-285H (2025)提升百分比核心架構2核4線程 (Skylake)16核16線程 (6P8E2LPE)700%核心數制程工…

具身系列——PPO算法實現CartPole游戲(強化學習)

完整代碼參考&#xff1a; https://gitee.com/chencib/ailib/blob/master/rl/ppo_cartpole.py 執行結果&#xff1a; 部分訓練得分&#xff1a; (sd) D:\Dev\traditional_nn\feiai\test\rl>python ppo_cartpole_v2_succeed.py Ep: 0 | Reward: 23.0 | Running: 2…

Python項目源碼60:電影院選票系統1.0(tkinter)

1.功能特點&#xff1a;通常選票系統應該允許用戶選擇電影、場次、座位&#xff0c;然后顯示總價和生成票據。好的&#xff0c;我得先規劃一下界面布局。 首先&#xff0c;應該有一個電影選擇的列表&#xff0c;可能用下拉菜單Combobox來實現。然后場次時間&#xff0c;可能用…

【全隊項目】智能學術海報生成系統PosterGenius--圖片布局生成模型LayoutPrompt(2)

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;大模型實戰訓練營_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 前…

Linux的時間同步服務器(附加詳細實驗案例)

一、計時方式的發展 1.古代計時方式? 公元前約 2000 年&#xff1a;古埃及人利用光線留下的影子計時&#xff0c;他們修建高聳的大型方尖碑&#xff0c;通過追蹤方尖碑影子的移動判斷時間&#xff0c;這是早期利用自然現象計時的典型方式 。?商朝時期&#xff1a;人們開發并…