1 URL 重写
即在URL后通过?的形式传参,可以用来在多个页面共享数据和sessionID。例如 index.jsp?name=guoguo
它是在客户端浏览器禁用Cookie或不支持Cookie情况下使用的
2 隐藏域
即通过表单中隐藏域传递数据的方式,达到在多页面共享数据的。
例如 <form>
<input type="hidden" name="uname" value='guoguo'>
</form>
无论是URL重写还是隐藏域传值,都必须使用request.getParameter("")方法来取值,这正是他们的缺点,即共享数据的后期处理较麻烦。
3 Cookie
默认情况下,服务器第一次回应客户端时就把sessionID保存在客户端的Cookie中,浏览器第二次发起请求时,请求头信息中就包含上次的sessionID,服务器就会根据这个sessionID判读这两次是否是同一个客户的访问。
当然,我们也可以利用他的这个特性,人为的在Cookie中保存一些其他信息,比如保存用户名和密码。第一次请求登陆时服务器就把你的密码保存在客户端的Cookie中,当第二次登陆时,你的请求头就会包含上次保存的Cookie信息,这样服务器就会把它读出来直接显示在密码框中。
A 是否保存信息到Cookie中,是有服务器决定的。通过如下方法实现
Cookie c=new Cookie("key","value");
c.setMaxAge(2000); //必须设置最大存活时间,否则不会保存硬盘中
response.addCookie( c );
B 第二次登陆时,服务器要检查是否有Cookie信息 ,如下:
Cookie [ ] cc= request.getCookies();
for(int i=0; cc!=null && i<cc.length; i++)
{
if( cc[i].getNname.equals("key") ) //Key是你保存是取到键名
{
String v= cc[i].getValue();
//这个V就是你保存的值了
}
}
4 session
session是页面共享数据的最佳方案,当客户端第一次请求服务器,服务器就创建一个session对象,同时分配一个sessionID,并保存在客户端Cookie中,以后每次请求服务器就是那Cookie中的sessionID和session对象中ID对比来确定是否是同一个客户端的。如果相等的,那么这个session对象就可以在在当前页面使用。否则就会重新创建一个session对象。
如果你在第一次请求时,存放数据在session对象中,那么下次请求时自然就能取到,因为两次请求的sessionID一致。
这种状态持续到浏览器关闭为止。