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

来源:互联网 发布:凤凰于飞 知乎 编辑:程序博客网 时间:2024/04/29 18:23
10.Cookie:Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源//哪个服务器的Cookie当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了Cookie是服务器送给浏览器的小纸条!保存在客户端的!当客户端再次发出请求时,会把这个服务器的cookie归还给服务器!服务器通过cookie来识别客户端状态! // 根据服务器,来区别发送cookieCookie的覆盖:如果服务器端发送重复的Cookie那么会覆盖原有的CookieCookie添加与获取:客户端访问AServlet,AServlet在响应中添加Cookie,浏览器会自动保存Cookie。然后客户端访问BServlet,这时浏览器会自动在请求中带上CookieCookie 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中可以多使用一个域对象 pageContextServletContext:一个项目只有一个对象    //一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用中共享,//  只要不重启服务器,那么ServletContext中的数据就可以共享HttpSession: 一个会话只有一个对象 //一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据HttpServletRequest:一个请求只有一个对象    //一个请求创建一个request对象,所以在同一个请求中可以共享requestAPI: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,即sessionId4:服务器再通过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中覆盖这个配置!

0 0
原创粉丝点击