当前位置: 移动互联网学院 > Android开发 > Android服务器Jsp状态管理
Android服务器Jsp状态管理 时间:2017-09-15     来源:移动互联网学院

Jsp状态管理

http协议无状态性 

无状态是指,当游览器发送请求给服务器的时候,服务器响应客户端请求。 

但是当同一个游览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个游览器。 

简单说,就是服务器不会去记得你,所以就是无状态协议。 

保存用户状态的两大机制 

Session 

Cookie 

Cookie概述

Cookie简介 

Cookie中文名称“小甜点”,是Web服务器保存在客户端的一些列文本信息。 

典型应用一:判定注册用户是否已经登录网站 

典型应用二:“购物车”的处理 

典型应用三:视频播放器的历史记录 

典型应用四:记住用户名和密码功能 

Cookie的作用 

对特定对象的追踪 

保存用户网页游览记录与习惯 

简化登录 

安全风险:容易泄露用户信息 

Cookie的创建与使用

创建Cookie对象 

Cookie newCookie = new Cookie(String key, Object value); 

写入Cookie对象

response.addCookie(newCookie); 

读取Cookie对象

Cookie[] cookies = request.getCookies(); 

Cookie常用方法

设置cookie的有效期,以秒为单位。 

void setMaxAge(int expiry) 

在cookie创建后,对cookie进行赋值 

void setValue(String value) 

获取cookie的名称

String getName() 

获取cookie的值

String getValue(); 

获取cookie的有效时间,以秒为单位

int getMaxAge(); 

创建cookie对象,并将对象保存在客户端游览器中

//创建cookie对象 Cookie cookie01 = new Cookie("name", "Ivy"); //设置Cookie的生命周期,如果设置为负值的话,关闭浏览器就失效。如果设为0,表示取消该cookie。 cookie01.setMaxAge(60*30); Cookie cookie02 = new Cookie("pass", "123"); //向游览器输出Cookie response.addCookie(cookie01); response.addCookie(cookie02); 

从游览器读取该网站存放的所有cookie对象

//读取所有的Cookie Cookie cookies[] = request.getCookies(); if(cookies != null){ out.print(cookies.length+"<br>"); for(int i=0; i<cookies.length; i++){ out.print(cookies[i].getName()+"<br>") ; out.print(cookies[i].getValue()+"<br>"); } } 

从游览器中删除该网站存放的指定cookie对象

//删除游览器中的cookie Cookie cookie01 = new Cookie("name", "Ivy"); cookie01.setMaxAge(0); response.addCookie(cookie01); 

Session与Cookie的对比 

cookie数据存放在客户的浏览器上,session数据放在服务器上。 

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。 

session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用cookie。 

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点多保存20个cookie。 

建议:将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

案例

cookie在登录中的应用

练习

使用cookie通知用户游览该网站的次数

指令与动作

include指令 

语法

<%@ include file="URL"%> 

include动作 

语法

<jsp:include page="URL" flush="true|false" /> 

page:要包含的页面 

flush:被包含的页面是否从缓冲区读取 

include指令与include动作区别 

<jsp:forward>动作

语法

<jsp:forward page="URL" /> 

等同于 

request.getRequestDispatcher("/url").forward(request, response); 

<jsp:param>动作 

语法 

<jsp:param name="参数名" value="参数值"> 

常常与<jsp:forward>一起使用,作为其子标签。

例如

test01.jsp

<body> <form action="test02.jsp" method="post"> <input type="text" name="user"> <input type="submit" value="提交"> </form> </body> 

test02.jsp

<jsp:forward page="test.jsp"> <jsp:param value="1111" name="pass"/> </jsp:forward> 

test.jsp

名字:<%=request.getParameter("user") %> 密码:<%=request.getParameter("pass") %>