二、servlet不同页面共享数据的四中方式

一、同一个用户不同页面共享数据

(1)sendRedirect()跳转
(2)隐藏表单提交(form)。
(3)session技术。
(4)cookie技术。

下面介绍这四种方式共享数据各自特点:
1,sendRedirect()跳转:
通过该方法可以将一个页面的信息传入到另外一个页面
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);

优点:传送信息的速度比较快。
缺点:它只能传送字符串,不能传递对象。
注意点:

  1. Wel代表你要传递那个servlet的url。
  2. servlet的url名和变量之间有个,变量名=之间不要有空格。
  3. 如果传递2个以上的值之间用&分割;比如:resp.sendRedirect(“Wel?username=” + name + “&pwd=” + pwd);
  4. 如果传递的是中文,需要处理一下防止乱码,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有哪些用处?

  1. 网上商城购物车。
  2. 保存用户登录的信息。
  3. 将用户信息保存到session中,供其他页面使用。
  4. 防止用户非法访问某个页面。
    。。。。。。等等。

举例:防止非法访问某个页面

如果用户信息验证合法,则向服务器写入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的使用

  1. 获得session
    HttpSession session = req.getSession(true);
  2. 向session中添加某个属性
    session.setAttribute(String name, Object obj);
  3. 从session中得到某个属性
    session.getAttribute(String name);
  4. 从session中移除某个属性
    session.removeAttribute(String name);
  5. 注销session中的内容(比较安全的一种方式)
    session.setMaxInactiveInterval(0);

(5) session的注意事项:

  1. session默认保存的时间30min,当然也可以修改①web.xml修改。②代码修改。
    // 设置超时时间。
    session.setMaxInactiveInterval(20);

  2. 30min指的是用户闲置时间,而不是累计时间。

  3. 当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的sessionId,并以此区分不通浏览器。
  4. 因为session的各个属性要占用服务器内存,因此逼不得已下才使用。

4、cookie技术

(1)什么是cookie

服务器在客户端保存的用户信息。比如登录名、密码等等就是cookie,服务器在需要的时候可以从客户端进行读取,当再次访问服务器的时候可以在一定时间内不用重复登录。
这里写图片描述

(2)cookie的使用

  1. 创建cookie

    Cookie cookie=new Cookie(String name, String value);

  2. 将cookie添加到客户端。
    response.addCookie(cookie);

  3. 读取cookie
    request.getCookie();

  4. 删除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的比较

  1. 存在位置
    session保存在服务端,cookie保存在客户端。
  2. 安全性
    cookie的安全性比session弱。
  3. 网络传输量
    cookie通过网络在客户端与服务器端传输,session保存在服务器端,不需要传输。
  4. 生命周期
    session的时间是闲置时间,如果客户端再次访问服务器session会重新计时,服务器销毁时session失效;cookie是累计时间,服务器关闭时,cookie仍然保存在客户端,除非cookie累计超时。

最后我做了一个关于cookie的保存在客户端的demo:
http://download.csdn.net/detail/tianyejun6/9726756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值