欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

SpingMVC詳解-創(chuàng)新互聯(lián)

文章目錄
  • SpringMVC
    • 1. SpringMVC是什么?
      • 1.1 MVC定義
      • 1.2 創(chuàng)建SpringMVC項目
    • 3.SpringMVC的主要三個功能
      • 3.1SpringMVC的連接功能
        • 3.1.2注解介紹
        • 3.1.3 @RequestMapping默認可以接收所有http請求
        • 3.1.4@GetMapping 和 PostMapping只能默認是GET和POST
      • 3.2 獲取參數(shù)功能
        • 3.2.1 傳遞單個參數(shù)
        • 3.2.2 獲取多個參數(shù)
        • 3.2.3獲取對象
        • 3.2.4獲取表單參數(shù)
        • 3.2.5@RequestBody接收JSON對象
        • 3.2.6 上傳文件@RequestPart
        • 3.2.7獲取Cookie/Session/Header
        • 3.2.8 使用參數(shù)重命名
        • 3.2.9 特殊的URL地址和獲取參數(shù)的方式:使用@PathVariable
      • 3.3返回數(shù)據(jù)
      • 3.3.1請求重定向和請求轉(zhuǎn)發(fā)

創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括網(wǎng)站制作、成都網(wǎng)站制作、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。SpringMVC 1. SpringMVC是什么?

SpringMVC全稱Spring Web MVC,Spring Web MVC又簡稱Spring Web或Spring MVC,它是一個基于Servlet API的框架

一個經(jīng)典問題:Spring/SpringBoot/SpringMVC的區(qū)別

答:我們說的Spring就是Spring farmework ,Spring farmework它里面包含很多模塊,它的最早核心功能就是IOC容器,能夠去除代碼的一個耦合性,SpringBoot在創(chuàng)建之初的目的就是為Spring服務(wù)的,就是為了快速開發(fā)Spring框架嘛,相比于Spring來說,SpringBoot有很多優(yōu)點,比如說它內(nèi)置了tomcat容器,可以更容易地添加依賴,發(fā)布也很簡單,可以擺脫xml文件,它將Spring的功能升上了一個層次,所以后面大家都很喜歡SpringBoot了,都用SpringBoot了,后面很多插件也都是專門為SpringBoot去做的,但是SpringBoot底層還是基于Spring實現(xiàn)的;SpringMVC全稱Spring Web MVC,Spring Web MVC又簡稱Spring Web或Spring MVC,它是一個基于Servlet API的框架,SpringMVC是隨著Spring的誕生而誕生的,它最早是Spring里的一個外部模塊而已,就是說Spring它有很多很多模塊,其中就有一個是基于http協(xié)議,那些request,response這些http請求,這個就是SpringMVC

1.1 MVC定義

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

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qcPiXxwp-1670216730082)(../md文件圖片備份/image-20221204203745876.png)]

  • Model(模型)是應(yīng)?程序中?于處理應(yīng)?程序數(shù)據(jù)邏輯的部分。通常模型對象負責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。

  • View(視圖)是應(yīng)?程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。

  • Controller(控制器)是應(yīng)?程序中處理?戶交互的部分。通??刂破髫撠?zé)從視圖讀取數(shù)據(jù), 控制?戶輸?,并向模型發(fā)送數(shù)據(jù)。

最早SpringMvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面;
現(xiàn)在前后端分離了,要返回數(shù)據(jù)了,現(xiàn)在要加注解才能返回數(shù)據(jù),

MVC和SpringMVC的聯(lián)系

MVC是一種思想,SpringMVC是對MVC思想的具體實現(xiàn),總結(jié)來說SpringMVC是一個實現(xiàn)了MVC模式并繼承了Servlet API的web框架。

1.2 創(chuàng)建SpringMVC項目

在創(chuàng)建 Spring Boot 項?時,我們勾選的 Spring Web 框架其實就是 Spring MVC 框架,如下圖所 示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dSjLwWyI-1670216730083)(../md文件圖片備份/image-20221204202721572.png)]

學(xué)習(xí) Spring MVC 是因為它是?切項?的基礎(chǔ),我們以后創(chuàng)建的所有 Spring、Spring Boot 項?基本都是基于 Spring MVC 的。

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

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

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

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

3.1SpringMVC的連接功能

在 Spring MVC 中使? @RequestMapping 來實現(xiàn) URL 路由映射,也就是瀏覽器連接程序的作?。 接下來要實現(xiàn)的功能是訪問地址:http://127.0.0.1:8080/web/hi,能打印“Hi springMvc”信息。

代碼如下:

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")//路由注冊,當(dāng)使用/web可以訪問到當(dāng)前類
public class WebController {@RequestMapping("/hi")//路由注冊,當(dāng)使用/web/hi可以訪問到當(dāng)前方法
    public Object sayHi() {return "Hi springMvc";
    }
}
3.1.2注解介紹

@RequestMapping 是 Spring Web 應(yīng)?程序中最常被?到的注解之?,它是?來注冊接?的路由映射的。

路由映射:所謂的路由映射指的是,當(dāng)?戶訪問?個 url 時,將?戶的請求對應(yīng)到程序中某個類 的某個?法的過程就叫路由映射。

@RequestMapping 即可修飾類,也可以修飾?法,當(dāng)修飾類和?法時,訪問的地址是類 + ? 法。

@ResponseBody 表示當(dāng)前類返回的是非靜態(tài)頁面,而是數(shù)據(jù)

@Controller 表示是一個控制器,要在spring啟動時加載并注冊

@ResponseBody和@Controller有一個組合注解@RestController,使用@RestController可以代替@ResponseBody和@Controller

3.1.3 @RequestMapping默認可以接收所有http請求

如果沒有指定請求方式,@RequestMapping將接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP請求方式。

下面展示 @RequestMapping設(shè)置只接收post請求

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
    public Object sayHello() {return "Hi SpringMVC";
    }
}

@RequestMapping(value = “/hello” ,method = RequestMethod.POST),這個是關(guān)鍵

3.1.4@GetMapping 和 PostMapping只能默認是GET和POST

GET請求三種寫法

// 寫法1

@RequestMapping("/index")

// 寫法2

@RequestMapping(value = "/index",method = RequestMethod.GET)

// 寫法3

@GetMapping("/index")

Post請求兩種寫法

// 寫法1

@RequestMapping(value = "/index",method = RequestMethod.POST)

// 寫法2

@PostMapping("/index")
3.2 獲取參數(shù)功能 3.2.1 傳遞單個參數(shù)

寫法一:基于servlet的request來獲取參數(shù)(不推薦這么寫)

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get1_0")
    public Object getParam1_0(HttpServletRequest request, HttpServletResponse response) {return "Hi" + request.getParameter("name");//通過servlet里的request獲取參數(shù),但是不推薦這樣用
    }
}

特殊說明:在Spring MVC中默認內(nèi)置隱藏了兩個參數(shù),一個是Request(HttpServletRequest),一個是Response(HttpServletResponse)對象,所以如果想要使用這兩個參數(shù),只需要在方法中申明即可獲取到

寫法二:在 Spring MVC 中可以直接??法中的參數(shù)來實現(xiàn)傳參(推薦寫法)

?如以下代碼:

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get1")
    public Object getParam1(Integer age) {   return "value: "+age;
    }
}

3.2.2 獲取多個參數(shù)
@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {
    
    @RequestMapping("/get2")
    public Object getParam2(String name,Integer age) {
        return "name:: "+name + " | age:"+ age;
    }
}

Spring MVC中當(dāng)傳遞多個參數(shù)的時候,傳遞參數(shù)的順序是不影響程序的執(zhí)行的,獲取參數(shù)結(jié)果和參數(shù)的名稱有關(guān),和順序無關(guān)

3.2.3獲取對象

Spring MVC 可以?動實現(xiàn)參數(shù)對象的賦值,但是要設(shè)置getter和setter方法,但是只要加@Data注解就自動加了

@Data
public class Student {private Integer id;
    private String name;
    private Integer age;
    private String sex;
}
@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get3")
    public String getParam3(Student student) {return student.toString();
    }
}

在這里插入圖片描述

在沒有其他注解下,傳的參數(shù)要和Student里屬性名字一樣

3.2.4獲取表單參數(shù)

參數(shù)請求的類型:

  • URL傳參
  • ajax傳參
  • form表單傳參

這里以form表單傳參為例

用參數(shù)來接收form表單的參數(shù)

登錄 用戶:
密碼:
@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {   @RequestMapping("/login")
    public String login(String name,String password) {return "用戶名:" +name+" | 密碼:"+password+"";
    }
}

在這里插入圖片描述

用對象來獲取form表單的參數(shù)

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/req")
    public String req(User user) {return user.toString();
    }
}

在這里插入圖片描述

3.2.5@RequestBody接收JSON對象
@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/login3")
    public Maplogin3(@RequestBody User user) {Mapresult = new HashMap<>();
        result.put("name",user.getName());
        result.put("password",user.getPassword());
        return result;
    }
    
}

在這里插入圖片描述

@RequestBody可以用來獲取JSON對象

3.2.6 上傳文件@RequestPart

使用postman上傳文件
在這里插入圖片描述

后端寫代碼來接收

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/req2")
    public String req2(String name, @RequestPart("myfile")MultipartFile file) throws IOException {//保存文件
        file.transferTo(new File("D:/1/img.pong"));
        return "success";
    }

}
3.2.7獲取Cookie/Session/Header

瀏覽器會默認將當(dāng)前網(wǎng)站的所有cookie發(fā)送給后端

原因:http協(xié)議無狀態(tài)

傳統(tǒng)獲取 header/cookie

@RequestMapping("/param10")
@ResponseBody

public String param10(HttpServletResponse response, HttpServletRequest requ
est) {String name = request.getParameter("name");
 // 獲取所有 cookie 信息

 Cookie[] cookies = request.getCookies();
 String userAgent = request.getHeader("User-Agent");
 return name + ":"+userAgent;
}

使用注解獲取 Cookie—@CookieValue

@Controller //我是一個控制器,我要在spring啟動時加載并注冊
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁面,因為最早springmvc設(shè)計時是返回一個視圖,所以默認是返回一個靜態(tài)頁面,要加注解才能返回數(shù)據(jù);但是現(xiàn)在前后端分離了,要返回數(shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/cookie")
    public String cookie(@CookieValue("name") String name) {return "cookie"+name;

    }

}

獲取Header——@RequestHeader

@RequestMapping("/header")

public String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;
}

Session 存儲和獲取

Session 存儲和 Servlet 類似,是使? HttpServletRequest 中獲取的,如下代碼所示:

@RequestMapping("/setSession")
    public String setSession(HttpServletRequest request) {// 獲取 HttpSession 對象,參數(shù)設(shè)置為 true 表示如果沒有 session 對象就創(chuàng)建session

        HttpSession session = request.getSession(true);
        if(session!=null){session.setAttribute("username","小盧");
        }
        return "session 存儲成功";
    }

獲取Session可以使? HttpServletRequest

@RequestMapping("/sess")
@ResponseBody

public String sess(HttpServletRequest request) {// 如果 session 不存在,不會?動創(chuàng)建

 HttpSession session = request.getSession(false);
 String username = "";
 if(session!=null && session.getAttribute("username")!=null){username = (String) session.getAttribute("username");
 }
 return "username:"+username;
}

也可以使用注解@SessionAttribute

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

**@SessionAttribute(value = “username”,required = false **:required不設(shè)置它,默認是true,如果這個session不存在會報錯;如果設(shè)置為false,session沒有就沒有了,不會去報錯

3.2.8 使用參數(shù)重命名
@RequestMapping("/gettime")
    public String getTime(@RequestParam(value = "t",required = false)String time) {return "time: "+time;//此時只能識別t參數(shù),并將參數(shù)t的值,設(shè)置給time變量,此時即使使用time參數(shù),也是讀取不到前端的參數(shù)的,它現(xiàn)在只認參數(shù)名為t的參數(shù)
    }

required設(shè)置參數(shù)是否必傳,如果是true就需要必傳,不然就會報錯;設(shè)置為false不傳不會報錯

3.2.9 特殊的URL地址和獲取參數(shù)的方式:使用@PathVariable

從url中獲取參數(shù)

@RequestMapping("/login4/{name}/{password}")
    public String login4(@PathVariable("name") String name,@PathVariable("password") String password) {return "name: "+name+" | password"+ password;
    }

在這里插入圖片描述

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

返回數(shù)據(jù)比較簡單,基本上上面獲取完代碼后都會返回,這里就不展開,主要講請求重定向和請求轉(zhuǎn)發(fā)

3.3.1請求重定向和請求轉(zhuǎn)發(fā)

forward VS redirect

return 不但可以返回?個視圖,還可以實現(xiàn)跳轉(zhuǎn),跳轉(zhuǎn)的?式有兩種:

  • forward 是請求轉(zhuǎn)發(fā);
  • redirect:請求重定向。
// 請求重定向

@RequestMapping("/index")

public String index(){return "redirect:/index.html";
}

// 請求轉(zhuǎn)發(fā)

@RequestMapping("/index2")

public String index2(){return "forward:/index.html";
}

舉個例子說明一下forward和redirect吧

比如說,小盧同學(xué)告訴他媽媽說我想要買新鍵盤,如果小盧他媽媽說好,我?guī)湍闳ベI,這就是forward請求轉(zhuǎn)發(fā);如果他媽媽給他個地址讓他自己去買,這就是請求redirect重定向

也就是說,轉(zhuǎn)發(fā)是服務(wù)器幫轉(zhuǎn)的,而重定向是讓瀏覽器重新請求另一個地址

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ā)的??不在?個?錄下,會導(dǎo)致外部資源不可訪問)

舉個例子forward不能訪問到外部資源

@Controller

@RequestMapping("/user")

public class UserController {@RequestMapping(value = "/index")
 public String sayHi(){return "forward:/index.html";
 }
}

在這里插入圖片描述

在目錄中當(dāng)請求轉(zhuǎn)向到index.html后,因為hello.js和index.html不在同一個目錄,所以會導(dǎo)致獲取不到hello.js;改成請求重定向就能獲取到

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:SpingMVC詳解-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://aaarwkj.com/article30/gdopo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、標(biāo)簽優(yōu)化微信公眾號、網(wǎng)站改版、網(wǎng)站策劃、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
好看的中文字幕人妻少妇| 久久亚洲天堂av丁香| 操小姑娘国产精品视频| 中文字幕在线视频黄字幕 | 福利1中文字幕手机在线| 欧美亚洲午夜精品久久久| 日韩精品在线观看你懂的| 日本少妇人妻中文字幕| 日韩高清av一区二区三区| 国产精品99久久久久久宅男九| 欧美日韩精品人妻二区| 成人18禁视频免费看| 久久免费看少妇高潮免费| 黄色录像一级二级三级| 濑亚美莉在线观看一区二区三区| 亚洲人成伊人久久成| 国产黄色av网站在线| 欧美国产精品久久综合| 免费搜索国产男女视频| 久久偷拍女生厕所尿尿| 日本免费一区二区三区等视频 | 亚洲综合激情一区二区| 无套内谢少妇高朝毛片| 成年人片免费在线观看| 国产成人综合久久三区北岛玲| 中文字幕一区二区三区网站| 成人亚洲精品一区二区三区| 久久精品国产亚洲av蜜点| 男女搞j视频网站免费观看| 久久久久久国产精彩视频| 人妻日韩精品综合一二三四| 欧美精品熟妇乱黑人最大| 色在线观看综合亚洲欧洲| 国产91啦中文在线观看| 国产精品黄色自拍合集| 日日淫夜夜操熟女视频| 日本一区二区三区免费看视频| 在线欧美亚洲观看天堂| 日韩欧美乱码一区二区| 日日摸夜夜添添出白浆| 久久久久久成人综合色|