Java Web专题(一)
生活随笔
收集整理的這篇文章主要介紹了
Java Web专题(一)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.GET請(qǐng)求和POST請(qǐng)求 2.RESTFUL API 3.Session VS Cookie 4.Forward VS Redirect GET請(qǐng)求和POST請(qǐng)求 可以簡(jiǎn)單的認(rèn)為HHTP中的POST GET PUT DELETE對(duì)應(yīng)著CRUD 區(qū)別: 1)從語(yǔ)義上講GET更偏向于查詢操作,即GET請(qǐng)求不會(huì)對(duì)后臺(tái)數(shù)據(jù)產(chǎn)生影響;而POST則不同 2)一般來(lái)講GET請(qǐng)求是冪等的 Ps看到一個(gè)關(guān)于冪等很好的定義 abs(a) = abs(abs(a)) 3)GET將數(shù)據(jù)放在url上,而POST將數(shù)據(jù)放在HTTP body中;POST相對(duì)安全 4)如果使用POST就無(wú)法保存書簽
RESTFUL API 參考鏈接:https://juejin.im/entry/59e460c951882542f578f2f0 1)URL表示資源;兩種方式 /employees & /employees/56 2)名詞+方法替換動(dòng)詞url /createEmployee -> POST + /employees /updateEmployee -> PUT /employees/56 3)條件篩選時(shí),使用?添加條件 GET /employees?state=internal&maturity=senior 4)非資源請(qǐng)求使用動(dòng)詞url GET /calculate?para2=23¶2=432
Session & Cookie HTTP是一個(gè)無(wú)狀態(tài)協(xié)議,如何維持同一個(gè)用戶的會(huì)話? 對(duì)于客戶的第一個(gè)請(qǐng)求,容器會(huì)生成一個(gè)唯一的sessionId給到客戶端,客戶再以后的每一個(gè)請(qǐng)求中發(fā)回這個(gè)sessionId,這樣容器就知道客戶的身份了 客戶端和容器如何交換SessionId? 最常用的方法是通過(guò)cookie,在服務(wù)端給到客戶端的response中,header中有一個(gè)叫Set-Cookie的屬性,用于存放JSESSIONID;在客戶端到服務(wù)端的request中,header中有一個(gè)叫Cookie的屬性,用于存放JSESSIONID 如果禁用cookie這套機(jī)制怎么玩的轉(zhuǎn)? 用戶禁用cookie后,會(huì)忽視r(shí)esponse的header中的Set-Cookie;此時(shí)需要換一種辦法來(lái)交換sessionId 1)URL重寫 origin url + ;jsessionid=1231231 注意這里是服務(wù)端返回給客戶端的,在響應(yīng)發(fā)回的html中(比如href) 2)表單隱藏 分布式環(huán)境如何實(shí)現(xiàn)session共享? 參考鏈接:https://blog.csdn.net/u010028869/article/details/50773174?ref=myread 1)nginx對(duì)特定的sessionId進(jìn)行映射,即一個(gè)用戶的請(qǐng)求只會(huì)交給一個(gè)固定的機(jī)器處理 優(yōu)點(diǎn):無(wú)須對(duì)session做任何處理只要存在本機(jī)即可 缺點(diǎn):如果某臺(tái)機(jī)器掛掉,那么這臺(tái)機(jī)器保存session的用戶都要重新登錄 2)session復(fù)制,即所有的服務(wù)器共享session,任何一個(gè)服務(wù)器上session發(fā)生改變,都同步到其他服務(wù)器 優(yōu)點(diǎn):容錯(cuò)性較好,即使機(jī)器掛掉也ok 缺點(diǎn):容易造成網(wǎng)絡(luò)堵塞 3)session第三方共享,redis(集群) or db(集群) Forward VS Redirect 二者都可以稱為請(qǐng)求轉(zhuǎn)發(fā),前者稱為直接請(qǐng)求轉(zhuǎn)發(fā),后者稱為間接請(qǐng)求轉(zhuǎn)發(fā) Redirect:客戶端發(fā)送一個(gè)http請(qǐng)求,服務(wù)端Servlet1處理,之后執(zhí)行response.sendRedirect("target url"),之后客戶端再次向target url發(fā)送http請(qǐng)求 Forward:客戶端發(fā)送一個(gè)http請(qǐng)求,服務(wù)端Servlet1處理,之后調(diào)用requestDispatcher.forward(request,response),進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),直接轉(zhuǎn)發(fā)到Servlet2處理,最后處理完成后將response返回到客戶端 舉個(gè)例子:Servlet將模型傳遞到j(luò)sp就是通過(guò)forward RequestDispatcher view = request.getRequestDispatcher("result.jsp"); view.forward(request,response);
RESTFUL API 參考鏈接:https://juejin.im/entry/59e460c951882542f578f2f0 1)URL表示資源;兩種方式 /employees & /employees/56 2)名詞+方法替換動(dòng)詞url /createEmployee -> POST + /employees /updateEmployee -> PUT /employees/56 3)條件篩選時(shí),使用?添加條件 GET /employees?state=internal&maturity=senior 4)非資源請(qǐng)求使用動(dòng)詞url GET /calculate?para2=23¶2=432
| ? | POST(創(chuàng)建) | GET(讀取) | ?PUT(更新) | DELETE(刪除) |
| /employees | 創(chuàng)建一個(gè)新員工 | 列出所有員工 | 批量更新員工信息 | 刪除所有員工 |
| /employees/56 | (錯(cuò)誤) | 獲取56號(hào)員工的信息 | 更新56號(hào)員工的信息 | 刪除56號(hào)員工 |
Session & Cookie HTTP是一個(gè)無(wú)狀態(tài)協(xié)議,如何維持同一個(gè)用戶的會(huì)話? 對(duì)于客戶的第一個(gè)請(qǐng)求,容器會(huì)生成一個(gè)唯一的sessionId給到客戶端,客戶再以后的每一個(gè)請(qǐng)求中發(fā)回這個(gè)sessionId,這樣容器就知道客戶的身份了 客戶端和容器如何交換SessionId? 最常用的方法是通過(guò)cookie,在服務(wù)端給到客戶端的response中,header中有一個(gè)叫Set-Cookie的屬性,用于存放JSESSIONID;在客戶端到服務(wù)端的request中,header中有一個(gè)叫Cookie的屬性,用于存放JSESSIONID 如果禁用cookie這套機(jī)制怎么玩的轉(zhuǎn)? 用戶禁用cookie后,會(huì)忽視r(shí)esponse的header中的Set-Cookie;此時(shí)需要換一種辦法來(lái)交換sessionId 1)URL重寫 origin url + ;jsessionid=1231231 注意這里是服務(wù)端返回給客戶端的,在響應(yīng)發(fā)回的html中(比如href) 2)表單隱藏 分布式環(huán)境如何實(shí)現(xiàn)session共享? 參考鏈接:https://blog.csdn.net/u010028869/article/details/50773174?ref=myread 1)nginx對(duì)特定的sessionId進(jìn)行映射,即一個(gè)用戶的請(qǐng)求只會(huì)交給一個(gè)固定的機(jī)器處理 優(yōu)點(diǎn):無(wú)須對(duì)session做任何處理只要存在本機(jī)即可 缺點(diǎn):如果某臺(tái)機(jī)器掛掉,那么這臺(tái)機(jī)器保存session的用戶都要重新登錄 2)session復(fù)制,即所有的服務(wù)器共享session,任何一個(gè)服務(wù)器上session發(fā)生改變,都同步到其他服務(wù)器 優(yōu)點(diǎn):容錯(cuò)性較好,即使機(jī)器掛掉也ok 缺點(diǎn):容易造成網(wǎng)絡(luò)堵塞 3)session第三方共享,redis(集群) or db(集群) Forward VS Redirect 二者都可以稱為請(qǐng)求轉(zhuǎn)發(fā),前者稱為直接請(qǐng)求轉(zhuǎn)發(fā),后者稱為間接請(qǐng)求轉(zhuǎn)發(fā) Redirect:客戶端發(fā)送一個(gè)http請(qǐng)求,服務(wù)端Servlet1處理,之后執(zhí)行response.sendRedirect("target url"),之后客戶端再次向target url發(fā)送http請(qǐng)求 Forward:客戶端發(fā)送一個(gè)http請(qǐng)求,服務(wù)端Servlet1處理,之后調(diào)用requestDispatcher.forward(request,response),進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),直接轉(zhuǎn)發(fā)到Servlet2處理,最后處理完成后將response返回到客戶端 舉個(gè)例子:Servlet將模型傳遞到j(luò)sp就是通過(guò)forward RequestDispatcher view = request.getRequestDispatcher("result.jsp"); view.forward(request,response);
轉(zhuǎn)載于:https://www.cnblogs.com/luyu1993/p/9245152.html
總結(jié)
以上是生活随笔為你收集整理的Java Web专题(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 生存分析与R--转载
- 下一篇: [BZOJ 2839]集合计数