目錄
IDEA第一課(熟悉里面內容)?
建立連接 -@RequestMapping ? ? ? ? ?路由映射
請求 ? ? ? ?
1.傳遞單個參數?編輯
2.多個參數?編輯
3.傳遞數組
4.傳遞一個集合,但是這里我們傳遞的時候發生了500的錯誤
簡單介紹JSON
回顧Cookie和Session
Cookie和Session的區別
獲取Cookie的兩種方式
設置Session的方式
獲取Session的問題
獲取Http請求中的Header信息
IDEA第一課(熟悉里面內容)?
resources資源目錄
static ? ? ? /static 靜態文件
templates ?主要是配置相關的代碼 /templates模版
application .properties ? ?SpringBoot項目的配置文件-十分重要
test測試代碼,注意這里是放的開發人員的測試代碼,與測試人員無關
作為一名開發人員,需要對自己的代碼質量負責,不能完全依賴測試QA
功能開發之后,需要先自測,自測通過才交給測試人員
注意??文件夾的顏色也是有區別-藍色與綠色的java。當然可以在下圖去設置
在當前頁面我們和前面學的Servlet不同,首先Spring自己帶Tomcat。
其次和我們之前前往的路徑也不同,原因就是看下面的日志,他寫的ContentPath為""即空。
現在的Spring完全就不需要我們自己去下載Tomcat,給我們進行的一個封裝,但是實際使用的還是http協議
Spring Boot是幫助我們快速構建項目的
Springmvc是其中Boot的一個模塊,能用這個項目進行jAVAweb項目開發,就是一個Springmvc的一個項目,是基于Servlet進行改進的
MVC其實可以看成一種思想,通過Spring進行實現稱為SpringMVC,但是當前階段,MVC概念又發生了一些變化,后端人員不涉及前端頁面的開發,所以也就沒有view層,view現在又有了一層解釋,之前返回的視圖,現在更像是返回視圖的數據。
學習SpringMVC
建立連接 -@RequestMapping ? ? ? ? ?路由映射
訪問地址,類的路徑+方法路徑(比如下面在類的前面添加了一個RequestMapping,那么類也會有路徑了,/可以省略,但是推薦不要省略(標準-前加/后不加)
RequestMapping支持Post和Get都可以
@RequestMapping("/hello") @RestController public class HelloController { //此時就限定必須使用Get這個方法 //注解沒有寫屬性名字,默認就是value@RequestMapping(value = "/sayhi",method = RequestMethod.GET)public String sayHi(){return "hi,SpringBoot";} }
請求 ? ? ? ?
1.傳遞單個參數
底層邏輯:從請求的參數中,獲取參數名為name的值,并且給name賦值
2.多個參數
多個參數也是一樣,順序無所謂,注意??哈我說的是age可以和那個name換
但是如果使用基本基本類型,必須要學會傳值,不傳值就會報錯。所以開發的時候我們統一建議使用包裝類
后端參數重命名-必定需要傳的(如果使用了重命名-就必須要使用@RequestParam注解里的名字。假如你與注解的名字不同,則會報400的錯誤
如果我們像下圖一樣進行改動,那么雖然不會報錯,但是會傳不過來參數,即默認的空
public String m5(@RequestParam(value = "name",required = false) String username){return "接收到的參數:"+username;}
以上寫的,就是在web交互,也就可以說是SpringMVC
注意哈url后面的問號查詢字符串
3.傳遞數組
當我們請求中,同一個參數有多個的時候
4.傳遞一個集合,但是這里我們傳遞的時候發生了500的錯誤
5開頭的通常是服務端發生錯誤
4開頭的往往是客戶端發生錯誤
如果看到5開頭的錯誤,第一反應去看后端日志,后端日志從下往上看,一段一段的看,先看最后一段的首行
他的意思是,他的默認是傳遞一個數組,而不是一個集合,所以需要一個注釋,來聲明它是一個集合,這樣,他就會可以用集合了
@RequestMapping("/m6")public String m7(@RequestParam List<String> listParam){return "接收到的參數ListParam:"+listParam+"長度"+listParam.size();}
簡單介紹JSON
本質上是一個字符串,表示對象的字符串,通常稱為JSON字符串
假如要傳遞注解,就要使用一個RequestBody
public String m4(@RequestBody Person person){return "接收到的參數:"+person.toString();}
獲取URL中的參數
可以獲取一個,也可以獲取多個獲取多個就要自己去填寫,但是說需要注意他們的順序,而且選擇了順序之后,就需要往請求里面填寫東西(不能少填寫)
把文件傳遞到,當地的文件夾中,相當于我們平時下載的

public String m10(@RequestPart MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("/Users/lcl/Desktop/py/" +file.getOriginalFilename()));return "success";}
回顧Cookie和Session
Http是無狀態的->http沒有記憶功能的,現在的請求和過一會的請求,同樣的請求參數,得到的結果是一樣的->處理邏輯是一樣的,而不是指數據。
Cookie是客戶端機制,Session是服務器端機制 ,他們會常常結合在一起使用。
Http是無狀態的-http沒有記憶功能,現在請求和過一會的請求,同樣的請求參數,得到的結果是一樣的->處理邏輯是一樣
Cookie(相當于是一個學生證,能夠查到你的信息)
理解Session(服務器機制,根據你的xx,有你的信息就能夠查到你)
首先先要理解什么是會話???????
在計算機領域,會話是一個客戶與服務器之間不中斷的請求響應,服務器能夠識別出來請求來自同一個用戶,當一個未知的用戶向Web應用程序發送第一個請求時,就開始了一個會話,當用戶明確結束會話或服務器有一個時限內,沒有收到任何用戶的任何請求的時候,會話就結束了。
Cookie和Session的區別
Cookie是客戶端保存信息的一種機制,Session是服務器端保存用戶信息的一種機制
Cookie和Session之間主要通過SessionId關聯起來的,SessionId是Cookie和Session之間的橋梁
Cookie和Session經常會在一起配合使用,但不是必須配合
獲取Cookie的兩種方式
下面是兩種方式拿到Cookie,第一種是拿到全部的Cookie. @RequestMapping("/getCookie")public String getCookie(HttpServletRequest request){Cookie[]cookies= request.getCookies(); // for(Cookie cookie:cookies){ // System.out.println(cookie.getName()+":"+cookie.getValue()); // }if (cookies!=null) {Arrays.stream(cookies).forEach(cookie -> {System.out.println(cookie.getName() + ":" + cookie.getValue());});}return "獲取cookie成功";}//使用注解的第二個方式,只能一個一個拿@RequestMapping("/getCookie2") public String getCookie2(@CookieValue String bite,@CookieValue String aaa){return "cookie存取的值"+bite+",aaa"+aaa;}
設置Session的方式
public String setSession(HttpServletRequest request){HttpSession session= request.getSession();session.setAttribute("username","zhangsan");return "success";}
獲取Session的問題
//方法1:(原始版本,剛開始session為空。) @RequestMapping("/getSession")public String getSession(HttpServletRequest request){HttpSession session= request.getSession(false);if(session!=null){String username=(String) session.getAttribute("username");return "登錄用戶"+username;}return "session為空"; } 方法2: @RequestMapping("/getSession2") //默認是一個必須傳遞的參數,所以加上false(這樣你不傳遞參數也不會報錯) public String getSession2(@SessionAttribute (required = false) String username){return "username:"+username; } 方法3: Spring有一個內置的對象,和第一種方式相像,可以直接使用HttpSession等同于第一種的那個 request.Session(true) @RequestMapping("/getSession3") //內置對象,在需要的時候,加上即可,不需要的時候可以不寫 public String getSesson3(HttpSession session){String username=(String) session.getAttribute("username");return "登入用戶"+username; }
獲取Http請求中的Header信息
@RequestMapping("/getHeader") public String getHeader(HttpServletRequest request){ //User-Agent相當于是一個keyString userAgent= request.getHeader("User-Agent");return "userAgent"+userAgent; } @RequestMapping("/getHeader2") public String getHeader(@RequestHeader("User-Agent")String userAgent){return "userAgent"+userAgent; }