關于Java Web會話處理如何工作的困惑。使用servlet API和HttpSession對象使Cookies和標頭的差異變得神秘
您可以閱讀描述Cookies和相關標頭Set-Cookie``Cookie的RFC,并了解它們是什么。
你可以通過在第7章Servlet規格,如果你想詳細了解如何cookie和session有關系。
您首先需要了解HTTP是無狀態協議。這意味著客戶端發出的每個請求都與任何先前或將來的請求無關。但是,作為用戶,我們非常希望在與Web應用程序交互時具有某種狀態。例如,銀行應用程序只希望您能夠查看和管理交易。音樂流媒體網站可能希望根據您已經聽到的內容推薦一些好的節奏。
為此,引入Cookie和Session概念。Cookies是鍵值對,但具有特定格式(請參閱鏈接)。會話是服務器端實體,用于存儲跨越服務器和客戶端之間的多個請求/響應的信息(在內存中或持久存儲)。
該ServletHTTP會話使用與名字的cookie JSESSIONID和值標識會話。
該Servlet容器保持的地圖(YMMV)HttpSession對象和這些標識符。當客戶端第一次發出請求時,服務器會創建一個HttpSession具有唯一標識符的對象,并將其存儲在其映射中。然后Set-Cookie在響應中添加標題。它將cookie的名稱設置為,JSESSIONID并將其值設置為剛創建的標識符。
這是服務器使用的最基本的Cookie。您可以根據需要設置任意數量的信息。該ServletAPI使用該HttpServletResponse#addCookie(Cookie)方法為您簡化了操作,但是您可以使用該HttpServletResponse#addHeader(String,String)方法自己完成操作。
客戶端接收這些cookie,并將其存儲在某個地方,通常存儲在文本文件中。向服務器發送新請求時,它可以使用請求Cookie標頭中的cookie來通知服務器它可能已經完成了上一個請求。
當Servlet容器收到請求時,它將提取Cookie標頭值,并嘗試HttpSession使用JSESSIONIDcookie中的鍵從其映射中檢索對象。這HttpSession則物體被連接到HttpServletRequest該對象Servlet容器創建并傳遞給你的Servlet。您可以使用setAttribute(String,Object)和getAttribute(String)方法來管理狀態。
解決方法我正在學習Spring安全性和Spring MVC,但是我意識到我需要首先學習jsp Servlet和Java環境中的常規Web編程。
我對HttpServletRequest和HttpServletResponse對象以及如何使用它們向請求和響應對象添加標頭以及它們與會話的關系感到困惑。
據我了解,Cookie就像Content-type和Accept一樣是一種標頭。通過使用特定于使用標頭的上下文的方法,java servletapi使得使用標頭變得容易。例如:
response.setContentType(String mimeType)response.setContentLength(int lengthInBytes)
我的困惑從這里開始。Cookie不是String或int,它是一個對象:
response.addCookie(Cookie cookie)response.getCookies()
由于cookie是標頭的一種,因此我不能只使用以下內容:
String cookieVal = response.getHeader('cookie')
我很難理解會話管理及其與HttpServletRequest和HttpServletResponse API的關系。HttpSession對象的作用是什么?
HttpSession.getAttribute() // What is this getting??HttpSession.setAttribute('Bla Bla','valuetoset') // What is this setting?
相關文章:
1. mysql - 分庫分表、分區、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處2. css - 移動端 oppo 手機之 Border-radius3. 關于Mysql聯合查詢4. python 計算兩個時間相差的分鐘數,超過一天時計算不對5. 人工智能 - python 機器學習 醫療數據 怎么學6. 如何修改phpstudy的phpmyadmin放到其他地方7. javascript - vue-echarts-v3使用的過程中折線圖區域呈漸變色。8. 爬蟲圖片 - 關于Python 爬蟲的問題9. pip安裝提示Twisted錯誤問題(Python3.6.4安裝Twisted錯誤)10. c++ - 請問MySQL_Connection::isReadOnly 怎么解決?
