java学习笔记————本质篇2

时间:2021-09-21 21:55:22
10.Cookie:Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。
客户端会保存Cookie,并会标注出Cookie的来源//哪个服务器的Cookie
当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了


Cookie是服务器送给浏览器的小纸条!保存在客户端的!
当客户端再次发出请求时,会把这个服务器的cookie归还给服务器!服务器通过cookie来识别客户端状态! // 根据服务器,来区别发送cookie




Cookie的覆盖:如果服务器端发送重复的Cookie那么会覆盖原有的Cookie


Cookie添加与获取:客户端访问AServlet,AServlet在响应中添加Cookie,浏览器会自动保存Cookie。然后客户端访问BServlet,这时浏览器会自动在请求中带上Cookie
Cookie cookie = new Cookie("id", id);
response.addCookie(cookie);//响应cookie 到浏览器端 保存在浏览器端!


Cookie的生命: Cookie在客户端的有效时间
cookie.setMaxAge(-1) // 表示只在浏览器 内存中 存活。 一旦关闭浏览器窗口,那么cookie就会消失。
cookie.setMaxAge(0) // 它表示cookie被作废! 作删除操作
cookie.setMaxAge(60*60) // 表示cookie对象可存活1小时 当生命大于0时,浏览器会把Cookie保存到硬盘上


Cookie中根本不能保存中文: 除非先编码 再解码






11.Session:我们可以把一个会话内需要共享的数据保存到HttSession对象中!session底层是依赖Cookie的!!! // javax.servlet.http.HttpSession接口表示一个会话


获取HttpSession对象:
request.getSesssion() // 如果当前会话已经有了session对象那么直接返回, 如果当前会话还不存在会话,那么创建session并返回;
request.getSession(boolean) // 当参数为true时,与requeset.getSession()相同。 如果参数为false,那么如果当前会话中存在session则返回,不存在返回null;


HttpSession是域对象: // 下面三个是 Servlet中 可以使用的 域对象 而JSP中可以多使用一个域对象 pageContext
ServletContext:一个项目只有一个对象 //一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用*享,
// 只要不重启服务器,那么ServletContext中的数据就可以共享
HttpSession: 一个会话只有一个对象 //一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据
HttpServletRequest:一个请求只有一个对象 //一个请求创建一个request对象,所以在同一个请求中可以共享request


API:
setAttribute(String name, Object value)
getAttribute(String name)
removeAttribute(String name)
getAttributeNames()




void setMaxInactiveInterval(int interval):设置session允许的最大不活动时间(秒),如果设置为1秒,那么只要session在1秒内不被使用,那么session就会被移除;


void invalidate():让session失效!调用这个方法会让session失效,当session失效后,客户端再次请求,
服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId;




String getId():获取sessionId,其实它就是一个UUID,32位长的字符串;
int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session;
long getCreationTime():返回session的创建时间,返回值为当前时间的毫秒值;
long getLastAccessedTime():返回session的最后活动时间,返回值为当前时间的毫秒值;




boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,
但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。




session的实现原理:
session底层是依赖Cookie的!// 服务端 session 与 sessionID绑定 客户端通过响应回的cookie("sessionID",sessionID) 在下一次请求时,通过发送此cookie,让服务端识别
1:首次访问服务器,创建一个session对象,存放到session池中。再把session的id保存到cookie中发送给浏览器。 //cookie("sessionID",sessionID)
2:浏览器保存的sessionId。session则保存在服务器中
3:当客户端再次访问服务器,客户端会归还cookie,即sessionId
4:服务器再通过sessionId知道对应的session 对象,进行操作.
5:保存sessionId 的cookie 是内存cookie,浏览器关闭,cookie 没了。 // cookie.setMaxAge(-1)


session与浏览器:
session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命只能是-1,即只在浏览器内存中存在.
当用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,
所以服务器会创建一个session,并在响应中把sessionId保存到Cookie中发送给客户端。     
你可能会说,那原来的session对象会怎样?
当一个session长时间没人使用的话,服务器会把session删除了!
这个时长在Tomcat中配置是30分钟,可以在${CATALANA}/conf/web.xml找到这个配置,当然你也可以在自己的web.xml中覆盖这个配置!