Java Web_第5章_WEB应用程序状态管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Web应用程序状态管理回顾用HttpServletRequest对象处理请求如何使用GET/POST方法发送请求GET/POST请求比较HttpServletRequest对象中获取请求表单参数重定向和请求派发之间最大的区别在于,重定向由浏览器完成,而请求派发是在服务器端完成HttpServletRequest可以把一个对象用名字绑定在请求范围内,并且进行访问和删除目标状态管理概述CookieSessionURL重写隐藏表单域目标网站自动登录记录登录信息Web状态管理概述HTTP协议使用的是无状态的连接对容器而言,每一个请求都来自于一个新的客户如何让服务器知道,这一系列的请求都是同一个用户的行为呢?状态管理解决方案-Cookie把客户的状态信息保存在那里呢?客户端行吗?状态管理解决方案-Session把客户的状态信息保存在服务器端Session对象就是服务器为客户端创建并维护的用于存放客户状态数据的对象利用Cookie存放ID号状态管理解决方案-URL重写用户禁用Cookie怎么办?使用URL地址重写来解决把ID附加在URL地址后面状态管理解决方案-隐藏字段表单隐藏字段inputtype=”hidden”name=”session”value=”...”1:对用户在网站上的访问进行会话跟踪。2:为服务器端程序提供预定义的输入。3:存储动态产生的页面上下文信息。不足Cookie原理服务器在响应请求时将一些数据以“键-值”对的形式通过响应信息保存在客户端Cookiecookie=newCookie(cool,tiger!);response.addCookie(cookie);HTTP/1.1200OKServer:Apache-Coyote/1.1Set-Cookie:cool=tiger!;Expires=Fri,10-Oct-200809:30:23GMTContent-Type:text/html;charset=utf-8Content-Length:0Date:Fri,10Oct200809:30:03GMTCookie内容:cooltiger!localhost/lovobook/1024217559052829961032197683052829961032*HTTP请求内容:。。。Host:localhost:8080……Cookie:cool=tiger!不要将其用于特别敏感的信息在Serlvet中管理CookiesServlet中提供了如下一系列操作Cookie的APICookie(name,value):构造方法用于创建一个或多个CookiesetMaxAge(intlifetime):设置Cookie的过期时间(以秒为单位)。默认值为负值(Cookie将在浏览器关闭时过期)getMaxAge():获取Cookie的过期时间。setName(StringcookieName):设置Cookie的名字getName():获取Cookie的名字setValue(Stringvalue):指定Cookie的值。getValue():获取Cookie的值在Servlet中使用Cookie将Cookie发送到客户端的操作步骤:创建一个或多个Cookie,使用构造方法指定Cookie的名字和值使用setXXX方法为Cookie设置可选属性使用HttpServletResponse对象的addCookie()方法将Cookie插入到响应头中读取客户端传入的Cookie操作步骤:使用HttpServletRequest对象的getCookies方法返回一个Cookie对象数组Servlet遍历该数组(调用getName()方法),直到找到与名称相匹配的Cookie值Session原理服务器可以为每个客户端创建并维护一个Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为SessionID服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问Session工作流程Session会话跟踪机制用户发送请求服务器的响应如下再次发送请求HTTP/1.1200OKServer:Apache-Coyote/1.1Set-Cookie:JSESSIONID=3453597CE6EA6B4F948C09D67530F2C0;Path=/lovobookContent-Type:text/html;charset=utf-8...Cookie:JSESSIONID=3453597CE6EA6B4F948C09D67530F2C0示例if(op.equals(create)){HttpSessionsession=request.getSession();Listlist=(List)session.getAttribute(list);if(list==null){list=newArrayList();list.add(hey);session.setAttribute(list,list);}else{list.add(zhangsan);}out.print(list);}elseif(op.equals(invalidate)){HttpSessionsession=request.getSession(false);if(session!=null){session.invalidate();}}HttpSessoin接口HttpSession接口常用的一些方法setAttribute(java.lang.String,java.lang.Object):在Session对象中用一个名字绑定一个对象。getAttribute(java.lang.String):通过名字获取Session对象中保存的对象。removeAttribute(java.lang.String):在Session中删除与一个名字对应的对象。getCreationTime():返回第一次创建会话的时间。getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。setMaxInactiveInterval(intinterval):对于会话指定客户请求的最大间隔时间,以秒为单位。-1表示永不过期getMaxInactiveInterval(intinterval):返回客户请求的最大间隔时间。invalidate():会话结束,当前存在在会话中的所有会话属性也会解除绑定。getId():此方法返回每个session唯一的标识会话超时管理浏览器关闭时并不意味着Session对象被删除销毁会话可以采用如下三种方式设置会话超时在Session对象上调用invalidate()方法应用结束(崩溃或取消部署)在web.xml文件中配置…session-configsession-timeout15/session-timeout/session-config…以分钟为单位示例HttpSessionsession=request.getSession(false);if(session==null){session=request.getSession();session.setMaxInactiveInterval(10);session.setAttribute(uname,zhangsan);}else{out.print(session.getAttribute(uname));}Application与Session域范围的属性比较在web应用上下文域范围和Session域范围中,都可以用一个名字来绑定一个对象,从而在域范围内进行访问绑定在Session范围内的对象仅仅在一个持续的会话期间被维护绑定在Application(应用上下文)中的对象,在整个Web应用程序运行过程中都被维护。都使用相同的方法:setAttribute()getAttribute()Session持久化管理当服务器由于故障重启,或Web应用重新加载的时候,此时的Session信息将会怎样?Session对象的持久化Session对象在持久化时,存放在其中的对象以序列化的形式存放,实现java.io.Serializable接口Tomcat一般建立一个名为session.ser的文件,重启加载其中session信息后把它删除。URL重写Session对象的正常使用要依赖于CookieURL地址重写能够取得置于Cookie中的会话,并把会话ID附加到访问应用的各个URL最后URL重写方法:response.encodeURL()response.encodeRedirectURL(“/lovobook/sucess.html”)如果禁用Cookie怎么办?URL重写是容器自动完成的,但需要我们对URL进行编码才有效URL重写的实现HTTP/1.1200OK……Set-Cookie:JSESSIONID=F7A5D5B85C8036D46371D7D3B1E9D2D6;Path=/lovobook……htmlbodyahref=/lovobook/WriteURL;jsessionid=F7A5D5B85C8036D46371D7D3B1E9D2D6Click/a/body/html如果禁用Cookie,容器会同时尝试Cookie和URL重写这两种方法GET/lovobook/WriteURL;jsessionid=F7A5D5B85C8036D46371D7D3B1E9D2D6HTTP/1.1总结HTTP协议是无状态的接,连接只针对一个请求/响应状态管理方案:表单隐藏字段、Cookie、Session、URL重写Cookie是Web服务器发送到客户端浏览器并保存的简短文本信息Session是服务器为客户端创建并维护的用于存放客户状态数据的对象用户会禁用Cookie。这时我们可以使用URL地址重写来解决HttpServletResponse的addCookie方法将Cookie信息添加到响应信息中Session对象是在某个Servlet中调用HttpServletRequest.getSession()这样的语句时才被创建Session对象保存在服务器端,浏览器关闭时Session对象并没有被删除在向客户返回第一个响应时,会同时尝试设置Cookie和URL重写两种做法

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功