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

SpringMVC 程序開發(fā)

這篇具有很好參考價值的文章主要介紹了SpringMVC 程序開發(fā)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??作者:銀河罐頭
??系列專欄:JavaEE

??“種一棵樹最好的時間是十年前,其次是現(xiàn)在”

什么是 Spring MVC

SSM = Spring Boot + Spring Web(Spring MVC) + MyBatis

Spring Web MVC 是基于 Servlet API 構(gòu)建的原始 Web 框架,從?開始就包含在 Spring 框架中。它的正式名稱"Spring Web MVC"來自其源模塊的名稱(Spring-webmvc), 但它通常被稱為"Spring MVC".

  1. Spring MVC 是?個 Web 框架。
  2. Spring MVC 是基于 Servlet API 構(gòu)建的。

MVC 定義

MVC 是 Model View Controller 的縮寫,它是軟件?程中的?種軟件架構(gòu)模式,它把軟件系統(tǒng)分為模型、視圖和控制器三個基本部分。

SpringMVC 程序開發(fā)

怎么學 Spring MVC

學習 Spring MVC 我們只需要掌握以下 3 個功能:

1.連接的功能:將?戶(瀏覽器)和 Java 程序連接起來,也就是訪問?個地址能夠調(diào)?到我們的 Spring 程序

2.獲取參數(shù)的功能:?戶訪問的時候會帶?些參數(shù),在程序中要想辦法獲取到參數(shù)。

3.輸出數(shù)據(jù)的功能:執(zhí)?了業(yè)務(wù)邏輯之后,要把程序執(zhí)?的結(jié)果返回給?戶。

對于 Spring MVC 來說,掌握了以上 3 個功能就相當于掌握了 Spring MVC。

Spring MVC 創(chuàng)建和連接

創(chuàng)建 Spring MVC 項目

2018年之前,使用 maven 項目添加 Spring MVC 框架的方式來創(chuàng)建,太復雜。

2018年之后 ,使用 Spring Boot 來創(chuàng)建 Spring MVC 項目。

@RestController
public class UserController {

    @RequestMapping("/say")//可以是 1 級路由,也可以是 n 級路由
    public String sayHi(){
        return "hi spring mvc";
    }
}

SpringMVC 程序開發(fā)

實現(xiàn)用戶到 spring 程序的連接。

@RequestMapping 注解介紹

它支持 GET 請求

SpringMVC 程序開發(fā)

那它是否支持 post 請求?

用 postman 測試:

SpringMVC 程序開發(fā)

得出結(jié)論:它也支持 POST 請求.

SpringMVC 程序開發(fā)

GET, HEAD, POST,PUT, PATCH, DELETE, OPTIONS, TRACE 都支持。

在瀏覽器地址欄輸入地址,默認是 GET 請求。

  • 如果我想設(shè)置成只支持其中某一種請求類型,如何實現(xiàn)?
@RestController
public class UserController {
    @RequestMapping(value = "/sayhi",method = RequestMethod.POST)
    public String sayHi(){
        return "hi spring mvc";
    }
}

SpringMVC 程序開發(fā)

設(shè)置成只支持 POST 請求,再發(fā) GET 請求就失敗了。

@PostMapping

除了通過 @RequestMapping 來設(shè)置 POST,還可以通過@PostMapping 來設(shè)置。

@PostMapping("/sayhello")
public String sayHello(){
    return "hello spring mvc";
}

SpringMVC 程序開發(fā)

小結(jié):

2種實現(xiàn)路由連接的方式 :@RequestMapping 和 @PostMapping

@GetMapping("/hi")
public String hi(){
    return "spring mvc hi";
}

獲取參數(shù)

獲取單個參數(shù)

@RequestMapping("/sayhi")
public String sayHi(String name){
    return "hi " + name;
}

SpringMVC 程序開發(fā)

這里地址欄里 key 必須寫"name", 才能成功拿到 value

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

如果傳了錯誤的 key 或者不傳參數(shù) ,結(jié)果就是String 的默認值 null

@RequestMapping("/sayhi2")
public String sayHi2(Integer id){
    return "hi " + id;
}

SpringMVC 程序開發(fā)

@RequestMapping("/sayhi3")
public String sayHi3(int id){
    return "hi " + id;
}

SpringMVC 程序開發(fā)

參數(shù)傳遞不要使用基本數(shù)據(jù)類型(如 int)。

@RequestMapping("/sayhi4")
public String sayHi4(HttpServletRequest request, HttpServletResponse response){
    return "hi " + request.getParameter("name");
}

SpringMVC 程序開發(fā)

@RequestMapping("/sayhi4")
public String sayHi4(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.sendRedirect("https://www.sogou.com");
}

還可以實現(xiàn)重定向跳轉(zhuǎn)頁面。

獲取多個參數(shù)

@RequestMapping("/sayhi")
public String sayHi(String name, String password){
    return "name =  " + name + "  | password = " + password;
}

SpringMVC 程序開發(fā)

參數(shù)順序不重要,保證 key 正確就行。

傳遞對象

@Data
public class Userinfo {
    private int id;
    private String name;
    private String password;
    private int age;
}
//獲取對象
@RequestMapping("/reg")
public Object reg(Userinfo userinfo){
    return userinfo;
}

SpringMVC 程序開發(fā)

@RequestMapping("/h1")
public Object getH1(){
    return "<h1>我是 h1</h1>";
}

SpringMVC 程序開發(fā)

后端參數(shù)重命名

某些特殊的情況下,前端傳遞的參數(shù) key 和我們后端接收的 key 可以不?致, 比如前端傳遞一個 username 給后端,后端用 name 接收,這樣就會出現(xiàn)參數(shù)接收不到的情況,如果出現(xiàn)這種情況,我們就可以使用@RequestParam 來重命名前后端的參數(shù)值。

@RequestMapping("/reg2")
public Object reg(@RequestParam("username") String name, String password){
    return "name = " + name + "  | password = " + password;
}

SpringMVC 程序開發(fā)

如果前端傳的是 name, 會怎樣?

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

規(guī)定 前端必須傳 “username”.

@RequestMapping("/reg2")
public Object reg(@RequestParam(value = "username",required = false) String name, 
                  String password){
    return "name = " + name + "  | password = " + password;
}

required = false 設(shè)置之后

SpringMVC 程序開發(fā)

前端:對象/JSON 對象字符串

后端:對象/JSON 對象字符串

@RequestBody 接收JSON對象

用之前接收對象的方式,不能成功接收到 JSON 對象。

@RequestMapping("/reg")
public Object reg(Userinfo userinfo){
    System.out.println(userinfo);
    return userinfo;
}

用 postman 發(fā)送一個 post 請求。

SpringMVC 程序開發(fā)

用 @RequestBody 這個注解就可以成功接收到 JSON 對象了。

@RequestMapping("/reg3")
public Object reg3(@RequestBody Userinfo userinfo){
    return userinfo;
}

SpringMVC 程序開發(fā)

獲取URL中參數(shù)@PathVariable

/user?uid=12345

/user/12345 優(yōu)點:搜索引擎抓取關(guān)鍵字權(quán)重更高,更簡潔

@RequestMapping("/reg4/{name}/{password}")
public Object reg4(@PathVariable String name, @PathVariable String password){
    return "name = " + name + " | password = " + password;
}

SpringMVC 程序開發(fā)

如果把路徑里的 password 改成 pwd,會怎樣?

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

這個參數(shù)是必須的。所以會報錯。

@RequestMapping("/reg4/{name}/{pwd}")
public Object reg4(@PathVariable String name, @PathVariable(required = false) String password){
    return "name = " + name + " | password = " + password;
}

SpringMVC 程序開發(fā)

加 required = false 之后就不會報錯,但是 還是得不到 password 的值。

小結(jié):

@PathVariable: 基礎(chǔ) url 里面的參數(shù)(? 之前的參數(shù))

@RequestParam: url 參數(shù)部分的參數(shù)(? 之后的參數(shù))

@RequestMapping("/reg4/{name}/{pwd}")
public Object reg4(@PathVariable String name, @PathVariable(required = false,name = "pwd") String password){
    return "name = " + name + " | password = " + password;
}

SpringMVC 程序開發(fā)

上傳文件@RequestPart

@RequestMapping("/myupload")
public Object upload(@RequestPart("myimg")MultipartFile file){
    File saveFile = new File("D:\\Data\\myimg.png");
    try {
        file.transferTo(saveFile);
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

用 postman 發(fā)送 post 請求:

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

文件上傳成功。

默認要求上傳單個文件大小不超過 1MB.

Common Application Properties (spring.io)

SpringMVC 程序開發(fā)

如果我要上傳的文件很大怎么辦?

SpringMVC 程序開發(fā)

可以設(shè)置上傳文件大小。

有一個問題,后面上傳的文件會把之前的文件覆蓋。

MySQL -> InnoDB(5.5) -> B+存儲 -> 聚簇索引樹

葉子(數(shù)據(jù)頁) 主鍵(如果有) + 數(shù)據(jù)

  • 如何保證每次上傳的文件不會覆蓋?也就是最終保存的是不同的文件名。

UUID。

SpringMVC 程序開發(fā)

//上傳文件
@RequestMapping("/myupload")
public Object upload(@RequestPart("myimg")MultipartFile file){
    String fileName = UUID.randomUUID() + //文件名
            file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//后綴名
    File saveFile = new File("D:\\Data\\" + fileName);
    try {
        file.transferTo(saveFile);
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

SpringMVC 程序開發(fā)

成功上傳,沒有覆蓋原有的。

獲取Cookie/Session/header

//獲取 cookie
@RequestMapping("/getCookie")
public Object getCookie(@CookieValue(value = "java",required = false) String java){
    return "java = " + java;
}

SpringMVC 程序開發(fā)

我們可以手動構(gòu)造一個 cookie。

SpringMVC 程序開發(fā)

  • 獲取 Header
//獲取 header
@RequestMapping("/header")
public Object getHeader(@RequestHeader("user-agent") String userAgent){
    return "userAgent = " + userAgent;
}

SpringMVC 程序開發(fā)

  • 獲取 Session
private static final String SESSION_KEY = "USERINFO_SESSION_KEY";
//存儲 session
@RequestMapping("/setSession")
public void setSession(HttpServletRequest request){
    HttpSession session = request.getSession();//沒有就創(chuàng)建,默認是 true
    session.setAttribute(SESSION_KEY,"zhangsan");
}
//獲取 session
@RequestMapping("/session")
public Object getSession(@SessionAttribute(SESSION_KEY) String name){
    return "session = " + name;
}

SpringMVC 程序開發(fā)

返回數(shù)據(jù)

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

@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/getIndex")
    public Object getIndex(){
        return "index.html";
    }
}

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

確認 target 下有 index.html.

那是什么原因?

SpringMVC 程序開發(fā)

加了"/"之后就能訪問成功了。

SpringMVC 程序開發(fā)

加了"/“表示是 從根目錄去找"index.html”, 不加"/"是在 test 目錄下去找 "index.html"就找不到.

SpringMVC 程序開發(fā)

SpringMVC 程序開發(fā)

2)請求轉(zhuǎn)發(fā)或請求重定向

1.請求轉(zhuǎn)發(fā)

//請求轉(zhuǎn)發(fā)
@RequestMapping("/forward")
public String forward(){
    return "forward:/index.html";
    //return "/index.html"; 默認就是請求轉(zhuǎn)發(fā)
}

SpringMVC 程序開發(fā)

2.請求重定向

//請求重定向
@RequestMapping("/redirect")
public String redirect(){
    return "redirect:/index.html";
}

SpringMVC 程序開發(fā)

@RequestMapping("/redirect2")
public void redirect2(HttpServletResponse response) throws IOException {
    response.sendRedirect("https://www.baidu.com");
}

forward 和 redirect 具體區(qū)別如下:

  1. 請求重定向(redirect)將請求重新定位到資源;請求轉(zhuǎn)發(fā)(forward)服務(wù)器端轉(zhuǎn)發(fā)。
  2. 請求重定向地址發(fā)生變化,請求轉(zhuǎn)發(fā)地址不發(fā)?變化。
  3. 請求重定向,不存在原來的外部資源不能訪問;請求轉(zhuǎn)發(fā)服務(wù)器端轉(zhuǎn)發(fā) 有可能造成原外部資源不能訪問。

舉例:

請求轉(zhuǎn)發(fā):張三找李四借錢,李四自己也沒錢,李四又去找王五借,最終張三只借了一次錢,剩下的事都是 李四干的。

請求重定向:張三找李四借錢,李四自己也沒錢,李四告訴張三說自己沒錢讓張三去找王五借錢。然后張三又去找王五借到了錢。

請求轉(zhuǎn)發(fā)和請求重定向有什么區(qū)別? | Java?? 面試突擊 (javacn.site)文章來源地址http://www.zghlxwxcb.cn/news/detail-462161.html

到了這里,關(guān)于SpringMVC 程序開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 小程序怎么開發(fā)?怎么開發(fā)自己的小程序

    一、明確需求與定位 在開發(fā)小程序之前,需要明確需求. 首先,明確小程序的定位非常重要。我們需要確定小程序是為了提供便捷的購物體驗還是特定領(lǐng)域的服務(wù)。明確定位可以幫助我們更好地設(shè)計和優(yōu)化小程序的功能,以符合用戶的期望和需求。 其次,了解目標用戶群體也

    2024年02月22日
    瀏覽(28)
  • 微信小程序用什么工具開發(fā)(微信小程序開發(fā)工具介紹)

    微信小程序用什么工具開發(fā)(微信小程序開發(fā)工具介紹)

    有很多人在開發(fā)小程序之前都會去了解微信小程序開發(fā)工具,想知道微信小程序用什么工具開發(fā)。時至今日,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,現(xiàn)在開發(fā)微信小程序也能使用多種不同的工具,讓我們來了解一下吧。 一、微信開發(fā)者工具 這是微信官方提供的微信小程序開發(fā)工具,可以

    2024年02月11日
    瀏覽(95)
  • 商城小程序代客下單程序開發(fā)演示

    商城小程序代客下單程序開發(fā)演示

    一款專為傳統(tǒng)電商、實體商家開發(fā)的商城系統(tǒng)小程序,做私域、做留存、做社交必備功能全都有。 1、豐富的營銷玩法:拼團、秒殺、定金預售、分銷、社區(qū)團購、積分商城、支付有禮等主流獲客玩法都有。 2、強大的會員體系:普通會員、付費會員、會員卡制卡、賬戶儲值預

    2024年01月19日
    瀏覽(23)
  • 小程序云開發(fā)(十四):小程序的組件

    ???運行環(huán)境:小程序云開發(fā) ???撰寫作者:左手の明天 ???精選專欄:《python》 ????推薦專欄:《算法研究》 ??####? 防偽水印——左手の明天?#### ?? ?? 大家好??????,我是 左手の明天 !好久不見?? ?? 今天更新小程序云開發(fā) ?? ??? 最近更新: 2024 年 03 月

    2024年04月10日
    瀏覽(23)
  • 關(guān)機惡搞小程序的開發(fā)程序

    目錄 關(guān)機惡搞小程序的開發(fā)程序 一、引言 二、開發(fā)思路 三、代碼實現(xiàn) 1. 界面設(shè)計 2. 關(guān)機動畫 3. 關(guān)機邏輯 4. 恢復功能 5. 異常處理 四、相關(guān)術(shù)語解釋 關(guān)機惡搞小程序是一種基于C#語言開發(fā)的應用程序,旨在通過一些有趣的方式模擬關(guān)機過程,給用戶帶來歡樂和娛樂。本文檔

    2024年04月12日
    瀏覽(28)
  • 微信小程序怎么制作?【小程序開發(fā)平臺教學】

    微信小程序怎么制作?【小程序開發(fā)平臺教學】

    隨著移動互聯(lián)網(wǎng)的快速發(fā)展,微信小程序已經(jīng)成為了人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。從購物、支付、出行到社交、娛樂、教育,小程序幾乎涵蓋了我們生活的方方面面。那么,對于有營銷需求的企業(yè)商家來說,如何制作一個自己的微信小程序呢?下面給大家講解微信小程

    2024年02月06日
    瀏覽(23)
  • webstorm+小程序相配合來開發(fā)小程序

    webstorm+小程序相配合來開發(fā)小程序

    前言: ? ? ? ? webstorm可以安裝的一個小程序插件:?wechat-miniprogram-plugin?,來實現(xiàn)小程序語法的高亮,并識別 rpx 這種小程序?qū)S袉挝?,還可以實現(xiàn)跟開發(fā)者工具中一些類似的操作功能。 注意事項: 1、小程序的根目錄下的 project.config.json 文件中必須存在下面的才會被插件檢

    2024年02月14日
    瀏覽(23)
  • 【微信小程序】小程序是什么?怎樣快速上手開發(fā)一個小程序?

    【微信小程序】小程序是什么?怎樣快速上手開發(fā)一個小程序?

    大家好,從今天起我們開始微信小程序的學習之路,今天我們就先來認識一下什么是微信小程序,以及做好小程序開發(fā)前的準備! 微信小程序,簡稱小程序,是一種不需要下載安裝即可使用的應用,開發(fā)者可以快速地開發(fā)一個小程序。小程序可以在微信內(nèi)被便捷地獲取和傳播

    2024年02月09日
    瀏覽(93)
  • windows桌面程序開發(fā)

    一、 ?C# ?? WPF WPF是微軟推出的基于Windows Vista的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統(tǒng)一的編程模型、語言和框架,真正做到了分離界面設(shè)計人員與開發(fā)人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。 優(yōu)點:技術(shù)成熟;類庫多;數(shù)據(jù)與視圖分

    2024年02月06日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包