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

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";}
回顧C(jī)ookie和Session
Http是無(wú)狀態(tài)的->http沒(méi)有記憶功能的,現(xiàn)在的請(qǐng)求和過(guò)一會(huì)的請(qǐng)求,同樣的請(qǐng)求參數(shù),得到的結(jié)果是一樣的->處理邏輯是一樣的,而不是指數(shù)據(jù)。
Cookie是客戶端機(jī)制,Session是服務(wù)器端機(jī)制 ,他們會(huì)常常結(jié)合在一起使用。
Http是無(wú)狀態(tài)的-http沒(méi)有記憶功能,現(xiàn)在請(qǐng)求和過(guò)一會(huì)的請(qǐng)求,同樣的請(qǐng)求參數(shù),得到的結(jié)果是一樣的->處理邏輯是一樣
Cookie(相當(dāng)于是一個(gè)學(xué)生證,能夠查到你的信息)
理解Session(服務(wù)器機(jī)制,根據(jù)你的xx,有你的信息就能夠查到你)
首先先要理解什么是會(huì)話???????
在計(jì)算機(jī)領(lǐng)域,會(huì)話是一個(gè)客戶與服務(wù)器之間不中斷的請(qǐng)求響應(yīng),服務(wù)器能夠識(shí)別出來(lái)請(qǐng)求來(lái)自同一個(gè)用戶,當(dāng)一個(gè)未知的用戶向Web應(yīng)用程序發(fā)送第一個(gè)請(qǐng)求時(shí),就開(kāi)始了一個(gè)會(huì)話,當(dāng)用戶明確結(jié)束會(huì)話或服務(wù)器有一個(gè)時(shí)限內(nèi),沒(méi)有收到任何用戶的任何請(qǐng)求的時(shí)候,會(huì)話就結(jié)束了。
Cookie和Session的區(qū)別
Cookie是客戶端保存信息的一種機(jī)制,Session是服務(wù)器端保存用戶信息的一種機(jī)制
Cookie和Session之間主要通過(guò)SessionId關(guān)聯(lián)起來(lái)的,SessionId是Cookie和Session之間的橋梁
Cookie和Session經(jīng)常會(huì)在一起配合使用,但不是必須配合
獲取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成功";}//使用注解的第二個(gè)方式,只能一個(gè)一個(gè)拿@RequestMapping("/getCookie2") public String getCookie2(@CookieValue String bite,@CookieValue String aaa){return "cookie存取的值"+bite+",aaa"+aaa;}
設(shè)置Session的方式
public String setSession(HttpServletRequest request){HttpSession session= request.getSession();session.setAttribute("username","zhangsan");return "success";}
獲取Session的問(wèn)題
//方法1:(原始版本,剛開(kāi)始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") //默認(rèn)是一個(gè)必須傳遞的參數(shù),所以加上false(這樣你不傳遞參數(shù)也不會(huì)報(bào)錯(cuò)) public String getSession2(@SessionAttribute (required = false) String username){return "username:"+username; } 方法3: Spring有一個(gè)內(nèi)置的對(duì)象,和第一種方式相像,可以直接使用HttpSession等同于第一種的那個(gè) request.Session(true) @RequestMapping("/getSession3") //內(nèi)置對(duì)象,在需要的時(shí)候,加上即可,不需要的時(shí)候可以不寫(xiě) public String getSesson3(HttpSession session){String username=(String) session.getAttribute("username");return "登入用戶"+username; }
獲取Http請(qǐng)求中的Header信息
@RequestMapping("/getHeader") public String getHeader(HttpServletRequest request){ //User-Agent相當(dāng)于是一個(gè)keyString userAgent= request.getHeader("User-Agent");return "userAgent"+userAgent; } @RequestMapping("/getHeader2") public String getHeader(@RequestHeader("User-Agent")String userAgent){return "userAgent"+userAgent; }