关于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. Python的os.listdir在获取文件列表时的顺序问题2. mysql - ubuntu开启3306端口失败,有什么办法可以解决?3. windows-7 - Win7中Vmware Workstatoin与Xampp中Apache服务器端口冲突?4. javascript - h5页面中特殊字符在某些安卓手机上乱码(__ีุ_-ยู -----> __⊠-⊠⊠)5. javascript - 这是什么插件能把能把cli里面的webpack打包信息格式化?6. 这是什么情况???7. java - android 有没有离线版的sdk文档 不用联网就可以本地查找的,提高查阅文档的速度?8. typeof是啥意思9. java - 如何让maven优先使用用户setting.xml的配置?10. java - NamedParameterJdbcTemplate 性能测试
