Spring MVC程序開發(fā)
1. 什么是Spring MVC?
Spring Web MVC是基于Servlet API構(gòu)建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱是“Spring Web MVC”來自其原模塊的名稱,但是它通常被稱為“Spring MVC”
從上述定義我們可以看到兩個信息:
- Spring MVC 是一個Web框架
- Spring MVC 是基于Servlet API構(gòu)建的
然而要真正的搞懂Spring MVC?我們要先理解什么是MVC?
1.1 MVC定義
MVC是Model、View、Controller的縮寫,它是軟件工程當(dāng)中的一種軟甲架構(gòu)模式,它把軟件系統(tǒng)分為模型、視圖、和控制器三個基本部分
- Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)
- View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的
- Controller(控制器)是應(yīng)用程序處理用戶交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)
1.2 MVC 和 Spring MVC 的關(guān)系
MVC是一種思想,而Spring MVC是對MVC思想的具體實(shí)現(xiàn)
總結(jié)來說,Spring MVC是實(shí)現(xiàn)了一個MVC模式,并繼承了Servlet API的Web框架。既然是Web框架,那么用戶在瀏覽器當(dāng)中輸入U(xiǎn)RL之后,我們的Spring MVC項(xiàng)目就可以感知到用戶的請求
2. 為什么學(xué)習(xí)Spring MVC?
現(xiàn)在絕大部分的Java項(xiàng)目都是基于Spring或者是(Spring Boot)的,而Spring的核心是Spring MVC也就是說Spring MVC是Spring框架的一個核心模塊,而Spring Boot是Spring的腳手架。因此我們可以推斷出,現(xiàn)在市面上的絕大部分Java項(xiàng)目約等于Spring MVC項(xiàng)目,這就是學(xué)習(xí)它的原因
在創(chuàng)建Spring Boot項(xiàng)目的時候,我們勾選的Spring Web框架其實(shí)就是Spring MVC框架,
簡單來說,咱是所以要學(xué)習(xí)Spring MVC是因?yàn)樗且磺许?xiàng)目的基礎(chǔ),我們以后創(chuàng)建的Spring、Spring Boot項(xiàng)目都是基于Spring MVC的
3. 怎么學(xué)習(xí)Spring MVC?
學(xué)習(xí)Spring MVC我們只需要掌握3個功能:
- 連接的功能:將用戶(瀏覽器)和Java程序連接起來,也就是訪問一個地址能夠調(diào)用我們的Spring程序
- 獲取參數(shù)的功能:用戶訪問的時候會帶一些參數(shù),在程序中要想辦法獲取到參數(shù)
- 輸出數(shù)據(jù)的功能:執(zhí)行了業(yè)務(wù)邏輯之后,要把程序執(zhí)行的結(jié)果返回給用戶
3.1 Spring MVC的創(chuàng)建和連接
Spring MVC項(xiàng)目創(chuàng)建和Spring Boot項(xiàng)目創(chuàng)建相同(Spring MVC 和Spring Boot的方式相同)在創(chuàng)建的時候選擇Spring Web就相當(dāng)于創(chuàng)建了Spring MVC項(xiàng)目
在Spring MVC當(dāng)中使用@RequestMapping來實(shí)現(xiàn)URL路由映射,也就是瀏覽器連接程序的作用
3.1.1 創(chuàng)建Spring MVC項(xiàng)目
創(chuàng)建Spring Boot項(xiàng)目的時候勾選上Spring Web模塊即可
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
}
實(shí)現(xiàn)之后訪問地址:http://localhost:8080/user/sayhi
就可以訪問了
3.1.2 @RequestMapping 注解介紹
@RequestMapping是Spring Web應(yīng)用程序當(dāng)中最常被用的注解之一,它是用來注冊接口的路由映射的
路由映射:所謂的路由映射指的是,當(dāng)用戶訪問一個URL時,將用戶的請求對應(yīng)到程序中某個類的某個方法的過程就叫做路由映射
@RequestMapping的基礎(chǔ)使用
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")
public String sayHi2() {
return "你好,世界";
}
}
@RequestMapping既可以就是類,也可以修飾方法,當(dāng)修飾類和方法的時候,訪問的地址是類 + 方法
3.1.3 @RequestMapping是post 還是 get請求?
經(jīng)過測試之后,我們可以發(fā)現(xiàn)是都可以支持的
我們可以指定方法類型
3.1.4 @GetMapping 和 @PostMapping
三種實(shí)現(xiàn)方式:
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {
return "你好 世界";
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")
public String sayHi2() {
return "你好,世界";
}
@ResponseBody
@PostMapping("/sayhi3")
public String sayHi3() {
return "你好,世界3 ";
}
3.2 獲取參數(shù)
3.2.1 傳遞單個參數(shù)
在Spring MVC中可以直接用方法中的參數(shù)來實(shí)現(xiàn)傳參,比如以下代碼
@ResponseBody
@RequestMapping("/getuserinfoid")
public UserInfo getUserInfoId(Integer id) {
UserInfo userInfo = new UserInfo();
userInfo.setId(id);
userInfo.setName("張三");
userInfo.setAge(18);
userInfo.setPassword("1234");
return userInfo;
}
訪問的結(jié)果是:
3.2.2 傳遞對象
Spring MVC可以自動實(shí)現(xiàn)參數(shù)對象的賦值
@ResponseBody
@RequestMapping("/reg")
public UserInfo reg(UserInfo userInfo) {
return userInfo;
}
3.2.3 表單參數(shù)傳遞/傳遞多個參數(shù)
@ResponseBody
@RequestMapping("/login")
public String login(String name, String password) {
return "name: " + name + "password: " + password;
}
3.2.4 后端參數(shù)重命名
某些情況下,前端傳遞的參數(shù)key和后端接收的key可以不一致
@ResponseBody
@RequestMapping("/login")
public String login(@RequestParam(name = "username")String name, String password) {
return "name: " + name + "password: " + password;
}
3.2.5 設(shè)置參數(shù)必傳
默認(rèn)情況下,是必須要傳遞的,
我們可以設(shè)置成非必傳參數(shù)
如果我們的實(shí)際業(yè)務(wù)前端的參數(shù)是一個非必傳參數(shù),我們可以這樣操作
3.2.6 @RequestBody接收J(rèn)SON對象
如果沒有加上這一個注解,就會接收不到
3.2.7 獲取URL當(dāng)中的參數(shù)@PathVarible
代碼實(shí)現(xiàn):
@RequestMapping("/hero/{id}/{name}")
public String getHeroInfo(@PathVariable String id, @PathVariable String name) {
return "id" + id + "name" + name;
}
地址填寫方法:
3.2.8 上傳文件@RequestPart
@RequestMapping("/upimg")
public boolean upImg(Integer uid, @RequestPart("img") MultipartFile file) {
boolean result = false;
String fileName = file.getOriginalFilename();// 得到圖片名字
fileName = fileName.substring(fileName.lastIndexOf(".")); // 得到后綴
fileName = UUID.randomUUID().toString() + fileName;
try {
file.transferTo(new File ("D://"));
result = true;
} catch (IOException e) {
e.printStackTrace();
log.error("上傳錯誤" + e.getMessage());
}
return result;
}
3.2.9 獲取Cookie/Session/header
獲取cookie:
@ResponseBody
@RequestMapping("/cookie")
public String getCookie(@CookieValue("bit") String bite) {
return bite;
}
獲取header:
使用注解:@RequestHeader
Session的存儲和獲?。?/p>
Session的存儲我們只能使用傳統(tǒng)的方式,但是Session的獲取我們可以使用注解完成@SessionAttribute
3.3 返回?cái)?shù)據(jù)
3.3.1 返回靜態(tài)頁面
這時候如果要返回一個“hello.html”,這時候返回的是一個同名的頁面。所以我們在使用的時候都要加上一個注解ResponseBody
這里我們設(shè)置一個實(shí)用的技巧:熱部署
3.3.2 請求轉(zhuǎn)發(fā)和請求重定向
forward VS redirect
return 不但可以返回一個視圖,還可以實(shí)現(xiàn)跳轉(zhuǎn),跳轉(zhuǎn)的方式有兩種:
- forward 是請求轉(zhuǎn)發(fā)
- redirect 請求重定向
“轉(zhuǎn)發(fā)”和“重定向”的理解:在中國官方發(fā)布的內(nèi)容越少事情越大,“轉(zhuǎn)發(fā)”和“重定向“也是一樣:字越少,責(zé)任越大。轉(zhuǎn)發(fā)是服務(wù)器幫忙轉(zhuǎn)發(fā)的,而重定向是讓瀏覽器重新請求另一個地址
具體區(qū)別如下:
- 請求重定向(redirect)將請求重新定位到資源;請求轉(zhuǎn)發(fā)(forward)服務(wù)器端轉(zhuǎn)發(fā)
- 請求重定向地址發(fā)生變化,請求轉(zhuǎn)發(fā)地址不發(fā)生變化
- 請求重定向與直接訪問新地址效果一致,不存在原來的外部資源不能訪問;請求轉(zhuǎn)發(fā)服務(wù)器端轉(zhuǎn)發(fā)有可能造成外部資源不能訪問
3.3.3 @ResponseBody說明
@ResponseBody返回的值如果是字符會變成text/html,如果是對象會轉(zhuǎn)成appllcation/json返回給前端文章來源:http://www.zghlxwxcb.cn/news/detail-793363.html
@ResponseBody可以用來修飾方法或者修飾類,修飾類表示類中的所有方法都會返回html或者JSON而不是視圖文章來源地址http://www.zghlxwxcb.cn/news/detail-793363.html
到了這里,關(guān)于【Java】Spring MVC程序開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!