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")