一、同一个用户不同页面共享数据
(1)sendRedirect()跳转
(2)隐藏表单提交(form)。
(3)session技术。
(4)cookie技术。
下面介绍这四种方式共享数据各自特点:
1,sendRedirect()跳转:
通过该方法可以将一个页面的信息传入到另外一个页面
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);
优点:传送信息的速度比较快。
缺点:它只能传送字符串,不能传递对象。
注意点:
- Wel代表你要传递那个servlet的url。
- servlet的url名和变量之间有个?,变量名=之间不要有空格。
- 如果传递2个以上的值之间用&分割;比如:resp.sendRedirect(“Wel?username=” + name + “&pwd=” + pwd);
- 如果传递的是中文,需要处理一下防止乱码,resp.setContentType(“text/html,charset=gbk”);
2,隐藏表单提交(form)
这是最常见的一种方式,但有时特别有用。
例如:value变量可以隐士传递表单参数。
String value="123";
<form action ='login' method='post'>
<intput type='hidden' name ='a' value ="+value+"/>
</form>
3,session技术
(1) 什么是session?
(2) session有哪些用处?
- 网上商城购物车。
- 保存用户登录的信息。
- 将用户信息保存到session中,供其他页面使用。
- 防止用户非法访问某个页面。
。。。。。。等等。
举例:防止非法访问某个页面
如果用户信息验证合法,则向服务器写入session,正常页面跳转逻辑:
HttpSession session = req.getSession(true);
// 向session中添加某个属性
session.setAttribute("pass", "ok");
// 设置超时时间。
session.setMaxInactiveInterval(20);
// 跳转欢迎界面。
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);
非法访问处理,如果非法访问pass=null 则跳转到登录页面。
HttpSession session = req.getSession();
try {
String pass = (String) session.getAttribute("pass");
if (pass == null) {
resp.sendRedirect("Login");
}
} catch (Exception e) {
e.printStackTrace();
}
(3)对session的理解
(4)session的使用
- 获得session
HttpSession session = req.getSession(true); - 向session中添加某个属性
session.setAttribute(String name, Object obj); - 从session中得到某个属性
session.getAttribute(String name); - 从session中移除某个属性
session.removeAttribute(String name); - 注销session中的内容(比较安全的一种方式)
session.setMaxInactiveInterval(0);
(5) session的注意事项:
session默认保存的时间30min,当然也可以修改①web.xml修改。②代码修改。
// 设置超时时间。
session.setMaxInactiveInterval(20);30min指的是用户闲置时间,而不是累计时间。
- 当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的sessionId,并以此区分不通浏览器。
- 因为session的各个属性要占用服务器内存,因此逼不得已下才使用。
4、cookie技术
(1)什么是cookie
服务器在客户端保存的用户信息。比如登录名、密码等等就是cookie,服务器在需要的时候可以从客户端进行读取,当再次访问服务器的时候可以在一定时间内不用重复登录。
(2)cookie的使用
创建cookie
Cookie cookie=new Cookie(String name, String value);
将cookie添加到客户端。
response.addCookie(cookie);读取cookie
request.getCookie();删除cookie
tempCookie对象调用setMaxAge(0)方法,设置cookie存在时长0秒。
注意:必须设置cookie有效时长,才能保存在客户端,即调用setMaxAge(int second) 方法,这里的second是累计时间。
举例说明cookie的使用
保存cookie到客户端
// 在服务器创建一个cookie
Cookie cookie = new Cookie("color", "red");
// 设置cookie存在时间30s(必须设置有效时长,才能保存在客户端)
cookie.setMaxAge(30);
// 保存cookie到客户端
resp.addCookie(cookie);
System.out.println("保存到color cookie到客户端");服务端读取cookie
// 获取cookie
Cookie[] cookies = req.getCookies();
if (null != cookies) {
for (int i = 0; i < cookies.length; i++) {
Cookie tempCookie = cookies[i];
if (tempCookie.getName().equals("color")) {
String value = tempCookie.getValue();
System.out.println("保存color cookie value=" + value);
// 删除color cookie
tempCookie.setMaxAge(0);
break;
}
}
} else {
System.out.println("客户端不存在color cookie");
}
二、session和cookie的比较
- 存在位置
session保存在服务端,cookie保存在客户端。 - 安全性
cookie的安全性比session弱。 - 网络传输量
cookie通过网络在客户端与服务器端传输,session保存在服务器端,不需要传输。 - 生命周期
session的时间是闲置时间,如果客户端再次访问服务器session会重新计时,服务器销毁时session失效;cookie是累计时间,服务器关闭时,cookie仍然保存在客户端,除非cookie累计超时。
最后我做了一个关于cookie的保存在客户端的demo:
http://download.youkuaiyun.com/detail/tianyejun6/9726756