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重新發起請求。