Spring MVC/Web

1.Spring MVC 的介紹

Spring Web MVC是基于Servlet API構建的原始Web框架,也是Spring框架的一部分。它提供了靈活可擴展的MVC架構,方便開發者構建高性能的Web應用程序,并與 Spring 生態系統無縫集成。

2.MVC 設計模式


MVC(Model-View-Controller)是一種常見的軟件設計模式,用于將應用程序的邏輯分離成三個獨立的組件:

  • 模型(Model):模型是應用程序的數據和業務邏輯的表示。它負責處理數據的讀取、存儲和操作,以及業務規則的處理。模型通常是獨立于用戶界面的,可以在不同的視圖和控制器之間共享和重用。
  • 視圖(View):視圖是用戶界面的呈現部分,負責展示數據給用戶,并接收用戶的輸入。視圖通常是根據模型的數據進行渲染和更新的,它可以是Web頁面、圖形界面或命令行界面等。
  • 控制器(Controller):控制器是模型和視圖之間的協調者,負責接收用戶的輸入并根據輸入調用相應的模型邏輯。控制器將用戶的請求轉發給模型進行處理,并將處理結果傳遞給視圖進行展示。控制器還可以處理視圖的事件和狀態變化

MVC是一種思想,而Spring MVC是一種實現

  • 1.連接的功能:將?戶(瀏覽器)和 Java 程序連接起來,也就是訪問?個地址能夠調?到我們的 Spring 程序。
  • 2.獲取參數的功能:?戶訪問的時候會帶?些參數,在程序中要想辦法獲取到參數。
  • 3.輸出數據的功能:執?了業務邏輯之后,要把程序執?的結果返回給?戶

連接

想要實現路由注冊必須需要@Controller控制器注解

給類設置路由需要@RequesMapping注解 提供路由地址

@ResponseBody是說明返回的是一個非靜態頁面

@RestController注解是@Controller@ResponseBody

//只有Controller控制器才能實現路由注冊
//RestController和Controller能實現連接//@Controller //控制器 在spring啟動時 加載并注冊
//@ResponseBody //返回的是一個非靜態頁面
@RestController//是一個控制器 返回的是一個非靜態數據 組合注解
@RequestMapping("/web") //給當前類設置路由  當訪問/web時 可以訪問到當前類
public class Demo1 {
//    @ResponseBody //返回的是一個非靜態頁面
//    @RequestMapping("/tweb") //可以支持get、post請求@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法public Object test(){return "二級路由訪問";}
}

返回一個靜態頁面 很少用得到

@Controller
public class Demo2 {@RequestMapping("/test2")public Object test2(){return "/index.html";}
}

static里需要此頁面

Get請求方法

@RequestMapping("/tweb") //可以支持get、post請求
@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法
@GetMapping("/tweb1")

獲取單個數據

//這兩種都支持獲取單個參數 多個參數也可以
//在Spring MVC中默認內置隱藏兩個參數 一個是Request Response  如果想要使用 只需要在方法中聲明即可//方式一
@GetMapping("/tweb1") //只支持get方法public Object test1(HttpServletRequest request){return request.getParameter("name");}//方式二  推薦@GetMapping("/tweb2")
//int不支持參數為空 Integer支持為空public Object test2(/*int*/ Integer age){//參數名必須相同 才能獲取到return age;}

@GetMapping("/tweb2")
public String test2(/*int*/ Integer age,String name){//參數順序不同不影響 只要保證key準確就可以return name+" "+age;
}

獲取參數是對象形式

參數請求類型

  • URL傳參

  • Ajax傳參

  • Form表單傳參

URL傳參

Form傳參

//使用參數
@GetMapping("tweb4")public String test4(String name,Integer password){return name+" "+password;}
//使用對象
@GetMapping("/tweb4")
public String test4(Student student){//保證前端傳來的數據 類內有即可return student.toString();
}

Ajax傳參

<script>function on(){jQuery.ajax({url:"tweb5",type:"GET",data:{"name":jQuery(".name").val(),"password":jQuery(".password").val()},success:function(res){alert(res);}});}
</script>
@GetMapping("/tweb5")
public Object tese5(String name,Integer password){User user=new User();user.setName(name);user.setPassword(password);return user;
}

普通得URL傳參和JSON的格式是不同的

url是在url傳參,而JSON是在body內

如果后端想接受JSON格式的,就需要使用@RequestBody注解 獲取JSON格式

后端接收前端傳來的文件

@GetMapping("/tweb6")
//                   (key的名字 不是圖片的名字) 獲取key為myfile的文件 賦值給這個file
public String test6(String name, @RequestPart("myfile") MultipartFile file) throws IOException {file.transferTo(new File("D:\\Spring Boot\\SpringMVCDemo1\\src\\main\\resources\\img.png"));return "success";
}

獲取cookie

//獲取cookie
@GetMapping("/tweb7")//獲取key為cookie的值 賦值給cookie
public String test7(@CookieValue("cookie") String cookie){return cookie;
}

這里可以設置Cookie

設置session

//設置session
@GetMapping("tweb9")
public String test9(HttpServletRequest request){HttpSession session=request.getSession();if(session==null){session.setAttribute("username","wangwu");}return "創建成功";
}

獲取/創建session

@GetMapping("tweb8")
//                                   如果有則返回 沒有則創建 值為null
public String test8(@SessionAttribute(value = "session",required = false) String session){return "session: "+session;
}

獲取請求頭內的數據

//獲取請求頭內的數據
@GetMapping("tweb10")
//                   獲取請求頭內key為 Host的數據
public String test10(@RequestHeader("Host") String head){return "head"+head;
}

獲取URL內的參數

只能獲取層級的參數 無法獲取?后面的參數

更改URL參數

//更改URL參數
//當前的傳的參數名不準確 可以通過后端來更正 (前端參數依舊是改不了 只是改了后端)
@GetMapping("tweb11")
// 前端參數名為a 當再傳a時 識別成user               設置成false 非必傳參數 這個參數不穿可以可以的
//默認為true 必傳參數         這時只能識別名為a的參數 依舊無法識別user的參數
public String test11(@RequestParam(value = "a",required = false) String user){return "user: "+user;
}

請求轉發和請求重定向的區別

請求轉發通常發生在服務器端,當一個服務器接收到請求后,它可能會將這個請求轉發給另一個服務器或者服務來處理。這個過程對于客戶端來說是透明的,客戶端并不知道請求被轉發了。轉發過程發生在服務器之間,客戶端只與第一個服務器通信。

請求重定向發生在客戶端和服務器之間的交互中。當服務器接收到一個請求后,它可能會告訴客戶端需要重新向另一個URL發送請求。客戶端接收到這個重定向指令后,會根據服務器提供的新URL重新發起請求。

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

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

相關文章

設計模式—23種設計模式重點 表格梳理

設計模式的核心在于提供了相關的問題的解決方案&#xff0c;使得人們可以更加簡單方便的復用成功的設計和體系結構。 按照設計模式的目的可以分為三大類。創建型模式與對象的創建有關&#xff1b;結構型模式處理類或對象的組合&#xff1b;行為型模式對類或對象怎樣交互和怎樣…

CSS實現圖片浮動在底層 div 之上,而不會影響底層 div 的布局和內容

前言&#xff1a;遇到個需求&#xff0c;需要圖片顯示在div之上&#xff0c;但是不占用div的空間布局&#xff0c;網上的答案五花八門&#xff0c;但其實使用css就可以簡單實現&#xff0c;僅以此博客作為記錄 舉個栗子 <div class"container"><img src&qu…

Linux 網絡編程基礎——網絡模型

網絡模型 網絡模型1. OSI七層模型1. 物理層&#xff08;Physical Layer&#xff09;2. 數據鏈路層&#xff08;Data Link Layer&#xff09;3. 網絡層&#xff08;Network Layer&#xff09;4. 傳輸層&#xff08;Transport Layer&#xff09;5. 會話層&#xff08;Session Lay…

研發機構大數據遷移如何保障敏感數據不泄露

隨著云計算和大數據技術的飛速進步&#xff0c;越來越多的企業正試圖通過數據遷移來提升IT基礎設施的效率&#xff0c;減少成本&#xff0c;并增強業務的靈活性。但是&#xff0c;這一過程并非沒有它的挑戰&#xff0c;尤其是在數據安全方面。數據在轉移過程中可能會遭遇黑客攻…

SQL的多表聯查

這里我先附上兩張表的數據&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;內連接&#xff09;返回兩個表中匹配的記錄。如果某條…

解決深度確定問題:使用不相交集合森林

解決深度確定問題&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基礎按秩合并與路徑壓縮深度確定問題的解決方案實現MAKE-TREE修改FIND-SET實現FIND-DEPTH實現GRAFT分析最壞情況運行時間結論參考文獻 引言 在計算機科學中&#xff0c;樹結構是…

時空扭曲:重溫相對論的終極挑戰,探尋真理的腳步

大家都知道&#xff0c;相對論是愛因斯坦提出的劃時代理論&#xff0c;為人類認知時空和引力做出了革命性貢獻。但這個理論真的萬無一失嗎&#xff1f;近日&#xff0c;一項新研究提出了測試時間扭曲的新方法&#xff0c;或許能讓我們重新審視相對論在宇宙大尺度上的適用性。 時…

HTML5好看的通用網站模板源碼

文章目錄 1.設計來源1.1 主界面1.2 模板菜單1 界面1.3 模板菜單2 界面1.4 模板菜單3 界面1.5 下拉菜單1 界面1.6 下拉菜單2 界面1.7 模板菜單4 界面1.8 模板菜單5 界面1.9 界面底部 2.效果和源碼2.1 動態效果2.2 源碼目錄2.3 源代碼 源碼下載 作者&#xff1a;xcLeigh 文章地址…

Python 造數據神器Faker

大家好&#xff0c;在編寫代碼過程中&#xff0c;我們經常需要一些假數據來進行測試或者演示。手動創建這些數據不僅耗時&#xff0c;而且容易出錯。幸運的是&#xff0c;Python有一個非常有用的庫叫做Faker&#xff0c;它可以生成各種類型的假數據&#xff0c;從名字、地址到公…

【驅動】ARM手冊引腳寄存器地址(絕對物理地址)查找(以AM437x為例)

1、問題描述 在配置設備樹時,經常遇到如下宏: XXX_IOPAD(pa, val)實際定義如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注釋中的說明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

說明&#xff1a;最近碰到一個需求&#xff0c;網絡請求&#xff0c;傳遞json的時候&#xff0c;必須加密&#xff0c;對字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示數據&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技術精粹:高級面試問題與解答指南(一)

Java 面試問題及答案 問題1&#xff1a;請解釋Java中的多態性&#xff0c;并給出一個例子。 答案&#xff1a; 多態性是Java中的一個重要特性&#xff0c;它允許一個引用類型可以指向多種實際類型的對象&#xff0c;并且可以通過這個引用調用實際對象的方法。多態性主要通過繼…

JAVA:常見的加密算法簡介

一、前言 加密算法是指將明文信息轉變為密文信息的過程&#xff0c;即將信息從可讀形式&#xff08;明文&#xff09;轉換為加密形式&#xff08;密文&#xff09;的過程。在加密過程中&#xff0c;信息通過加密算法和加密密鑰被加密處理&#xff0c;加密后的信息&#xff08;密…

【代碼隨想錄算法訓練Day17】LeetCode 110. 平衡二叉樹、LeetCode 257.二叉樹的所有路徑、LeetCode 404.左葉子之和

Day17 二叉樹第四天 LeetCode 110. 平衡二叉樹【后序遍歷】 平衡二叉樹仍是后序遍歷&#xff0c;就是獲取左右子樹的高度然后作差&#xff0c;如果子樹就不平衡&#xff0c;那么就直接將-1向上傳給父節點&#xff0c;否則該數的高度為左右子樹高度的最大值1。 class Solutio…

day 38 435.無重疊區間 763.劃分字母區間 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

435.無重疊區間 思路 為了使區間盡可能的重疊所以排序來使區間盡量的重疊&#xff0c;使用左邊界排序來統計重疊區間的個數與452. 用最少數量的箭引爆氣球恰好相反。 代碼 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中開啟盜鏈保護

本周有一個客戶&#xff0c;購買Hostease的主機&#xff0c; 客戶購買的是Linux虛擬主機&#xff0c;帶cPanel面板的。詢問我們的在線客服&#xff0c;如何可以防止他的網站上的圖片不被盜用。cPanel的盜鏈保護功能可以幫助客戶防止圖片被盜鏈。 盜鏈&#xff08;Hotlinking&a…

.NET Core與.NET Framework的區別

.NET Core和.NET Framework是微軟提供的兩種主要的開發平臺&#xff0c;用于構建各種應用程序。雖然它們都基于.NET技術&#xff0c;但在架構、平臺支持、性能、開發工具和社區支持等方面存在顯著差異。本文將詳細探討.NET Core和.NET Framework的主要區別&#xff0c;幫助開發…

呆馬科技----構建智能可信的踏勘云平臺

近年來&#xff0c;隨著信息技術的快速發展&#xff0c;各個行業都在積極探索信息化的路徑&#xff0c;以提升工作效率和服務質量。智慧踏勘云平臺是基于區塊鏈和大數據技術構建的全流程智慧可信踏勘解決平臺。平臺集遠程視頻、數據顯示、工作調度、過程記錄為一體&#xff0c;…

有容量限制的車輛路徑規劃問題(Capacitated Vehicle Routing Problem)

在看matlab的時候發現了這篇文章https://www.frontiersin.org/articles/10.3389/fict.2019.00013/full 仔細閱讀一下。(英語渣渣&#xff0c;自學用) The Capacitated Vehicle Routing Problem (CVRP) is an NP-optimization problem (NPO) that has been of great interest …

圖像處理之邊緣檢測(C++)

圖像處理之邊緣檢測&#xff08;C&#xff09; 文章目錄 圖像處理之邊緣檢測&#xff08;C&#xff09;前言一、Roberts算子1.原理2.代碼實現 二、Sobel算子1.原理2.代碼實現 三、Prewitt算子1.原理2.代碼實現 四、Laplacian算子1.原理2.代碼實現 五、LOG算子1.原理2.代碼實現 …