Servlet彙總
因爲看公司代碼,有個cookie+jwt.Token登錄驗證接口,於是回顧下servlet、cookie、session、前後端分離restful、jwt.token相關內容。雖然現在流行的是網關封裝各個接口,但是基礎還是比較重要,需要重新複習。
Servlet--基礎理論、實戰代碼鍛鍊:https://how2j.cn/k/servlet/servlet-eclipse/558.html
Servlet--拓展理論、實例參考鏈接:https://github.com/ZhongFuCheng3y/3y/blob/master/README.md#dollarservlettomcat
---
☕ 背景.Servlet相關對象介紹
簡介Servlet
首先Tomcat是servlet容器,用以 接受和返回 服務端和客戶端的請求(在此之前,沒有tomcat,就使用socket進行監聽處理)。
其次,在上述交互過程中,採用Http協議處理。HTTP協議是客戶端和服務器交互的一種通迅的格式。
最後,Servlet的生命週期即伴隨內置tomcat的調用而產生,伴隨tomcat的關閉而銷燬。下面列出Servlet相關對象。
- ServletConfig
通過此配置獲取web.xml中參數
-
ServletContext
tomcat啓動時獲取整個應用的配置文件。
-
Request、Response
分別對應http請求頭和響應頭
-
Cookie、Session
Cookie:存儲與客戶端,存儲用戶身份。Session:存儲與服務端,判斷用戶身份。
☕ 1.Servlet第一篇(tomcat、http協議)
目前都是httpservlet實現servlet的方法,重寫doget和dopost方法。
1.tomcat
tomcat底層是socket程序,也是jsp、servlet容器。
介紹tomcat中虛擬目錄和虛擬主機
虛擬目錄:文件不一定都放在webapps下,所以項目啓動後要訪問其他磁盤下的文件就需要配置虛擬目錄
虛擬主機:一個tomcat中配置多個域名,這樣就能通過多個域名訪問到同一個tomcat中.
2.Http協議
Http協議:超文本傳輸協議,在客戶端client和服務端server中交互
Http1.0:client和server屬於短暫連接,獲取資源後就斷開
Http1.1:client、server保持連接,並且可以獲得多個web資源
🎃2.Servlet第二篇(request,response)
1.request
#request參數介紹
request.getRequestURL(): 瀏覽器發出請求時的完整URL,包括協議 主機名 端口(如果有)"
request.getRequestURI(): 瀏覽器發出請求的資源名部分,去掉了協議和主機名"
request.getQueryString(): 請求行中的參數部分,只能顯示以get方式發出的參數,post方式的看不到
request.getRemoteAddr(): 瀏覽器所處於的客戶機的IP地址
request.getRemoteHost(): 瀏覽器所處於的客戶機的主機名
request.getRemotePort(): 瀏覽器所處於的客戶機使用的網絡端口
request.getLocalAddr(): 服務器的IP地址
request.getLocalName(): 服務器的主機名
request.getMethod(): 得到客戶機請求方式一般是GET或者POST
#瀏覽器中header信息
host: 主機地址
user-agent: 瀏覽器基本資料
accept: 表示瀏覽器接受的數據類型
accept-language: 表示瀏覽器接受的語言
accept-encoding: 表示瀏覽器接受的壓縮方式,是壓縮方式,並非編碼
connection: 是否保持連接
cache-control: 緩存時限
2.response
防盜鏈:某個珍貴資源B,需要通過鏈接A進來才能訪問,所以對請求B的接口中需要加入防盜鏈的功能
//防盜鏈
String referer = request.getHeader("Referer");
if (referer == null || !referer.contains("localhost:9090/huyuqiao")){
response.sendRedirect("huyuqiao");
return "盜取鏈接";
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("正版鏈接");
📖3.Servlet第三篇(cookie,session)*
1.Cookie
Cookie:在瀏覽器用以保存用戶身份/瀏覽記錄。結合其他技術(session,token,sso等)用以實現用戶登錄身份驗證功能。
//組裝Cookie
response.setContentType("text/html;charset=UTF-8");
PrintWriter printWriter = response.getWriter();
String name = "胡宇喬";
Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));
cookie.setMaxAge(2000);
response.addCookie(cookie);
printWriter.write("服務器頒佈的cookie,保存了中文數據");
//解碼cookie
Cookie[] cookies = request.getCookies();
Arrays.stream(cookies).forEach(c ->{
String cookieName = c.getName();
try {
String value = URLDecoder.decode(c.getValue(), "UTF-8");
printWriter.write(name + "-----" + value);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
});
2.Session
Session:保存在瀏覽器(默認30分鐘,關閉瀏覽器即消失),在登錄註冊中保存用戶信息,然後前端可以通過el表達式提取出用戶信息。
#session獲取、得到、設置、銷燬
HttpSession session = request.getSession
httpSession.getAttribute("name")
httpSession.setAttribute("name", "huyuqiao")
session.removeAttribute("name")