亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

      阿里云一面:詳解下Spring MVC 框架

      阿里云一面:詳解下Spring MVC 框架

      一、Spring MVC 是什么

      Spring MVC 全稱 “Spring Web MVC” 是一個 基于 Servlet API 構建的原始 Web 框架 ,從一開始就包含在 Spring 框架中

      Web 框架

      在之前學習 Servlet 的時候就已經接觸到 Web 。所謂的 Web 框架,就是當用戶輸入一個 URL 地址后,將 URL 地址和程序進行映射,然后通過程序獲取到用戶的請求,經過請求的處理后,服務器發(fā)送的響應能夠返回到客戶端,將結果展示給用戶

      Servlet API

      有關 Servlet API 的介紹文章

      MVC 含義

      MVC 是一種軟件工程中的一種軟件架構模式,將軟件系統(tǒng)分成了模型、視圖、控制器三部分

      M(Model) :指的是 模型 ,用于處理應用程序數(shù)據(jù)邏輯部分

      V(View) :指的是 視圖 ,用于處理數(shù)據(jù)顯示部分

      C(Controller) :指的是 控制器 ,用于處理用戶交互的部分

      解釋

      用戶通過瀏覽器去訪問程序的時候,請求會先到 Controller(控制層),控制層驗證參數(shù)的合法性,如果沒有問題的話,就會將請求轉發(fā)給 Model(模型)進行業(yè)務的處理,然后將結果(業(yè)務數(shù)據(jù))響應給控制層,然后控制層再將數(shù)據(jù)發(fā)送給 View(視圖),視圖最后做合并和整理工作,組裝成了一個 HTML 頁面,最后將頁面響應給用戶

      總的來說, MVC 就是一種思想, Spring MVC 就是對 MVC 這是一種思想的具體實現(xiàn)

      二、Spring MVC 具體使用

      2.1 Spring MVC 創(chuàng)建

      Spring MVC 使用 Spring Boot 的方式創(chuàng)建的,創(chuàng)建的 Spring Boot 項目過程中有勾選依賴這一環(huán)節(jié),勾選的 Spring Web 框架 就是 Spring MVC 框架,將該依賴給勾選上了,其余的就是正常的創(chuàng)建 Spring Boot 項目的步驟

      2.2 Spring MVC 連接

      Spring MVC 連接即將用戶和 Java 程序進行連接,用戶通過一個地址就可以調用到 Spring 程序

      @RequestMapping 注解

      在 Spring MVC 中常常使用 @RequestMapping 注解實現(xiàn)路由映射

      路由映射就是用戶訪問 URL 時,能夠將用戶的請求和程序中的某個類中的某個方法對應起來

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/hello”) public String func() { return “

      Hello Spring MVC

      “; }}

      解釋

    2. 當啟動項目后,訪問地址 http://127.0.0.1:8080/index/hello 就能獲取到返回的內容 “Hello Spring MVC”
    3. @RestController 注解是 @Controller 和 @ResponseBody 這兩個注解的合體 。添加 @Controller 注解是為了項目啟動后,該類放在了 Spring 容器中,被加載,方才能被訪問到。添加 @RequestBody 注解是因為默認情況下會返回一個靜態(tài)頁面,但是此時只是返回一個數(shù)據(jù),因此需要添加
    4. @RequestMapping 注解是可以修飾類,也可以修飾方法,一定要在方法上添加注解,類上面不一定需要
    5. 默認情況下,@RequestMapping 接收 GET 方式 的請求,但是也可以接受 POST 方式 的請求
    6. 顯示指定方法

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(value = “/hello”,method = RequestMethod.POST) public String func() { return “

      Hello Spring MVC

      “; }}

      通過 method 參數(shù) 內容就可以指定具體的接收方法,此時該方法只能接收 POST 請求

      @GetMapping 和 @PostMapping

      除了在 @RequestMapping 注解中指定接收的方法之外,也可以直接使用 @GetMapping 和 @PostMapping 注解,前者使得方法只能接收 GET 請求,后者使得方法只能接受 POST 請求

      2.3 如何獲取參數(shù)

      2.3.1 通過 URL 傳遞參數(shù)

      例如URL:http://127.0.0.1:8080/index/getUser?userName=peter&passWord=123

      想要獲取 userName 和 passWord 對應的內容,可以直接使用方法中的參數(shù)來實現(xiàn)傳參

      代碼展示

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/getUser”) public String getUser(String userName,String passWord) { return “userName->”+ userName + ” | passWord->” + passWord; }}

      結果顯示

      注意

      2.3.2 通過表單傳遞參數(shù)

      通過表單進行參數(shù)的傳遞方法也是和上面差不多的

      代碼同上面的代碼展示,通過 PostMan 進行提交 form 表單,也需要注意參數(shù)的對應

      結果展示

      2.3.3 傳遞對象

      在參數(shù)較少的情況下,會使用直接傳參的方式,如果參數(shù)較多時,使用對象進行傳參會更好

      代碼展示

      @Datapublic class User { private String userName; private String passWord;}@RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/getUser1”) public String gerUser1(User user) { String name = user.getUserName(); String word = user.getPassWord(); return “對象中的userName:” + name + ” | 對象中的passWord:” + word; }}

      結果顯示

      代碼參數(shù)是一個 User 對象,說明待會需要接收的就是一個對象,然后就會拿著這個對象中的所有屬性,在請求中匹配參數(shù)

      2.3.4 補充

      后端參數(shù)的重命名

      后端參數(shù)名未必一定要和前端參數(shù)名一模一樣,可以通過 @RequestParam 注解來 重命名前后端的參數(shù)值

      @RequestMapping(“/getUser”)public String getUser(@RequestParam(“userName”) String name,String passWord) { return “userName->”+ name + ” | passWord->” + passWord;}

      前端的參數(shù) key 是 userName 和 passWord ,后端的參數(shù) key 是 name 和 passWord

      設置參數(shù)必傳/非必傳

      同樣是上面的代碼,如果參數(shù)中只傳了 userName 參數(shù)會怎樣,只傳了 passWord 參數(shù)會怎樣

      結果顯示

      如果沒有傳遞 passWord 參數(shù),影響不大

      如果沒有傳遞 userName 參數(shù),就會報 400 錯誤

      原因就是 @RequestParam 中的 required 參數(shù)默認值為 true ,表示 為必傳參數(shù)

      如果有參數(shù)需要使用 @RequestParam 注解且該參數(shù)是非必傳參數(shù),就需要將 required 參數(shù)值設置為 false

      @RequestMapping(“/getUser”)public String getUser(@RequestParam(value = “userName”,required = false) String name,String passWord) { return “userName->”+ name + ” | passWord->” + passWord;}

      2.3.5 接收 JSON 對象

      使用 @RequestBody 來接收 JSON 對象

      代碼展示

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/loginByJson”) public String loginByJson(@RequestBody User user) { return “userName:” + user.getUserName() + ” | passWord:” + user.getPassWord(); }}

      結果顯示

      2.3.6 獲取 URL 中的參數(shù)

      一般來說,獲取 URL 中的參數(shù)一般是指獲取 query String 中的參數(shù)值,但還有一種特殊的,就是從 URL 的 PATH 中獲取參數(shù)

      需要通過 @PathVariable 注解

      代碼展示

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/loginByPath/{userName}/{passWord}”) public String loginByPath(@PathVariable(“userName”) String name, @PathVariable String passWord) { return “userName:” + name + ” |passWord:” + passWord; }}

      注意

    7. 路徑中的參數(shù)需要用花括號包裹
    8. @PathVariable 中傳入參數(shù)也可以實現(xiàn)重命名
    9. 注意參數(shù)名的一一對應(不可少參數(shù))
    10. 結果顯示

      2.3.7 文件上傳

      使用 @RequestPart 注解上傳圖片

      代碼展示

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/upLoad”) public String upLoadFile(String userName, @RequestPart(“picture”)MultipartFile file) throws IOException { //獲取文件后綴 String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(“.”)); //文件路徑 String filePath = System.getProperty(“user.dir”)+ “/src/main/resources/picture/” + UUID.randomUUID().toString(); //拼接路徑 String finallyPath = filePath + suffix; file.transferTo(new File(finallyPath)); return userName + “上傳了一張圖片”; }}

      注意

    11. RequestPart 注解里對應的是上傳圖片的參數(shù)名
    12. 通過 file.getOriginalFilename() 方法獲取圖片的完整名,然后通過查找最后一個 “.” ,來截取出后綴名
    13. System.getProperty(“user.dir”) 為獲取當前工程目錄
    14. 拼接完路徑后,file.transferTo(new File(finallyPath)),創(chuàng)建文件實例并保存
    15. 為了生成獨一無二的文件名,這里使用了 UUID
    16. 結果顯示

      2.3.8 獲取 Cookie/Session/header

      獲取 Cookie

      通過 @CookieValue 注解

      @RequestMapping(“/getCookie”)public String getCookie(@CookieValue(“newCookie”) String value) { return “cookie:” + value;}

      最一開始訪問該方法時結果為 404 ,因為此時沒有 key 為 newCookie 這樣的 Cookie

      通過瀏覽器端模擬該 Cookie 后,就可以獲取到 Cookie 的值

      獲取 Header

      通過 @RequestHeader 注解

      @RequestMapping(“/getHeader”)public String getHeader(@RequestHeader(“User-Agent”) String content) { return “User-Agent:” + content;}

      獲取 Session

      通過 @SessionAttribute 注解

      按照以前的方法來創(chuàng)建 Session

      @RequestMapping(“/setSession”)public String setSession(HttpServletRequest req) { HttpSession session = req.getSession(true); if(session != null) { session.setAttribute(“userName”,”Spring MVC”); } return “session 設置完成”;}

      獲取 Session 對象中的 key 為 userName 的值

      @RequestMapping(“/getSession”)public String getSession(@SessionAttribute(value = “userName”,required = false) String userName) { return “userName:” + userName;}

      2.4 如何返回參數(shù)

      2.4.1 返回靜態(tài)頁面

      默認請求下,Spring Boot 返回的是靜態(tài)頁面

      代碼展示

      @Controller@RequestMapping(“/index”)public class UserController { @RequestMapping(“/getView”) public String getView() { return “/index.html”; }}

      index.html 中主要內容為 Hello Spring MVC~

      2.4.2 返回 text/html

      在之前的各種例子中都是返回 text/html 類型,當方法 返回值為 String 時 ,并且有加上 @ResponseBody 注解,返回的就是 text/html 類型

      實例:計算機加法實現(xiàn)

      前端代碼展示

      計算機 數(shù)字1: 數(shù)字2:

      后端代碼展示

      @RestControllerpublic class CalcController { @RequestMapping(“/calc”) public String calc(Integer one, Integer two) { if(one == null || two == null) return “不可為空”; return String.format(“%d 加上 %d 等于 %d”,one,two,one+two); }}

      結果顯示

      2.4.3 返回 JSON

      通過 HashMap 返回數(shù)據(jù)或者返回一個 對象 ,返回的數(shù)據(jù)類型就是 JSON

      代碼展示(Map)

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/getUserByJson”) public HashMap getUserByJson(String userName,String passWord) { HashMap map = new HashMap(); map.put(“userName”,userName); map.put(“passWord”,passWord); return map; }}

      結果顯示(Map)

      代碼展示(對象)

      @RestController@RequestMapping(“/index”)public class UserController { @RequestMapping(“/getUserByJson1”) public User getUserByJson1(String userName,String passWord) { User user = new User(); user.setUserName(userName); user.setPassWord(passWord); return user; }}

      結果顯示(對象)

      實例:實現(xiàn)登錄操作

      要求:

    17. 用戶提交數(shù)據(jù)為 json 類型,返回結果為 json 類型
    18. 指定用戶名為 “Json”,用戶密碼為 “123”為登錄成功
    19. 前端代碼展示

      用戶登錄

      登錄

      用戶姓名: 用戶密碼:

      后端代碼展示

      @RestControllerpublic class LoginController { @RequestMapping(“/login”) public HashMap login(@RequestBody User user) { HashMap map = new HashMap(); String message = “”; //用戶名和密碼判斷,不得為null或”” if (StringUtils.hasLength(user.getUserName())&& StringUtils.hasLength(user.getPassWord())) { if (user.getUserName().equals(“Json”)&&user.getPassWord().equals(“123”)) { message = “”; }else { message = “用戶名或者密碼有誤,登錄失敗”; } }else { message = “請將信息填寫完整”; } map.put(“succ”,200); map.put(“message”,message); return map; }}

      結果展示

      2.4.4 請求轉發(fā)/請求重定向

      forward(請求轉發(fā))

      • 服務器進行轉發(fā);
      • 請求轉發(fā)地址不會發(fā)生變化;
      • 請求轉發(fā)由于是服務器轉發(fā)的原來的外部資源可能訪問不到

      redirect(請求重定向)

      • 請求重新定位到資源;
      • 請求的地址發(fā)生變化;
      • 請求重定向和直接訪問新地址效果是一樣的,原來的外部資源可以順利訪問到

      代碼展示

      前端代碼展示

      Document

      Hello Spring MVC~

      CSS代碼展示

      h1 { color: red;}

      后端代碼展示

      @Controllerpublic class UserController { //請求轉發(fā)@RequestMapping(“/forward”) public String forward() { return “forward:/index.html”; } //請求重定向 @RequestMapping(“/redirect”) public String redirect() { return “redirect:/index.html”; }}

      結果顯示

      可以看出轉發(fā)的 URL 是不變的,重定向的 URL 是會變的

      如果在類上也添加路由映射會發(fā)現(xiàn)請求轉發(fā)獲取不到資源了

      后端代碼展示

      @Controller@RequestMapping(“/index”)public class UserController { //請求轉發(fā)@RequestMapping(“/forward”) public String forward() { return “forward:/index.html”; } //請求重定向 @RequestMapping(“/redirect”) public String redirect() { return “redirect:/index.html”; }}

      結果展示

      此時轉發(fā)的頁面路徑多了 index, 和資源沒有在同一級目錄下,導致資源獲取的失敗

      原文 https://blog.csdn.net/weixin_46103589/article/details/125430579

      鄭重聲明:本文內容及圖片均整理自互聯(lián)網,不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月25日 18:44
      下一篇 2022年6月25日 18:45

      相關推薦

      • ios手游模擬器(手游模擬器ios)

        本文主要講的是ios手游模擬器,以及和手游模擬器ios相關的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 哪個iOS模擬器能多開手游賬號?可以推薦個好用的模擬器給我嗎…

        2022年11月27日
      • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應該怎么發(fā))

        對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

        2022年11月27日
      • 短視頻策劃內容的3個要點(短視頻策劃內容怎么做)

        短視頻在制作時,內容框架非常重要。如果直奔主題,然后結束,聚卓告訴你,這樣的短視頻已經過時了。現(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

        2022年11月27日
      • 美團第三季度實現(xiàn)營收626億元,即時配送訂單量增至50億筆

        新京報訊(記者秦勝南)11月25日,美團發(fā)布業(yè)績公告顯示,第三季度營收為626億元,較去年同比增長28.2%,凈利潤為12.2億元。第三季度,美團即時配送訂單數(shù)增長至50億筆。截至…

        2022年11月27日
      • 存儲過程語法(sql server存儲過程語法)

        今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

        2022年11月26日
      • 個人怎么做抖音帶貨(個人做抖音帶貨能賺錢嗎)

        抖音如今是大家很熟悉的短視頻平臺,不過現(xiàn)在的抖音卻不只是短視頻那么簡單,它的功能非常豐富,其中一個就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

        2022年11月25日
      • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

        寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

        2022年11月25日
      • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

        寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

        2022年11月25日
      • 拼多多百億補貼預售一般多久發(fā)貨(拼多多百億補貼預售)

        拼多多里面有很多優(yōu)惠活動,其中百億補貼活動非?;鸨?,一些里面的東西價格比別的平臺便宜,質量也有保障,還有預售的活動,那么拼多多百億補貼預售一般多久發(fā)貨?下面小編為大家?guī)砥炊喽喟賰|…

        2022年11月25日
      • 小紅書平臺的一些機制及玩法詳解(小紅書玩法有哪些)

        關于小紅書 一:小紅書平臺的一些機制 1. 筆記內容的CES評分機制 2. 筆記流量入口與長尾效應 二:小紅書優(yōu)質筆記的特點(分維度、類型分析) 1.筆記的本身架構組成 維度 2.…

        2022年11月25日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息