web 应用程序状态管理

来源:互联网 发布:淘宝u站九块邮 编辑:程序博客网 时间:2024/05/21 08:37

目标

  • 状态管理概述
  • cookie
  • Session
  • URL重写
  • 隐藏表单

Web状态管理概述

HTTP协议使用是无状态的连接

对于容器,每一个请求都是一个新的客户。

管理方案:

  • cookie
  • Session
  • URL重写
  • 隐藏表单(hidden)

什么是会话?

会话:打开浏览器,通过超链接或者按钮访问服务器,然后获取到内容,然后关闭浏览器,称为一次会话。

会话解决的问题?

用户访问服务器,想要保存当前的数据。

隐藏字段(隐藏表单)

在表单中加入:

<input type = "hidden" name = "session" ……>
  1. 对用户在网站上的访问进行跟踪
  2. 为服务器程序提供预定义的输入
  3. 储存动态产生的页面上下文信息

hidden:

  1. 可以区分多个表单提交。
  2. 可以保存当前用户操作表格的状态。
  3. 防止表单重复提交
  4. 保存用于的登录状态

不足:后台有时候需要动态生成一个hidden

cookie

cookie 是客户端的技术,程序把每个用户的数据都通过键值对的方式保存到cookie。

下次请求的时候,就将cookie放在请求头里面再次访问服务器,那服务器就可以根据cookie里面的内容来判断当前用户的状态。

代码操作

/*得到客户端发过来的cookie*/Cookie[] ck = request.getCookies();/*第一次是访问cookie是空的*/if(ck != null ){    for(int i = 0 ;  i < ck.length ; i++){        System.out.println();    }}else{    /*创建cookie*/    Cookie cook = new Cookie("键","值");    /*发送回客户端保存cookie*/    /*cookie 的时间是默认会话就消失,所以调用setMaxAge设置过期时间,将cookie保存到硬盘。 参数的单位是秒*/    cook.setMaxAge(100);    /*销毁cookie,设置setMaxAge(0)*/    response.addCookie(cook);}

Session

把客户的信息保存在服务端。

服务器端的技术,利用这个技术,可以为每一个浏览器(用户)创建一个独享的session

对象。

session的流程:

1.客户端请求服务器--创建一个session,将sessionID 保存到cookie里面去,再将cookie发送回客户端。

2.客户端再次发送请求,就将cookie发送给服务器,服务器取出sessionID去匹配所有的session,返回当前匹配的session对象。

代码操作

/*创建session对象,可以加入参数false ,就是如果没有匹配成功就返回null,如果加入了false 就不能用isNew()方法*/HttpSession hsession = request.getSession();/*   *   int id = hsession.getId();*   获取到cookie里面的id和session进行匹配*   匹配成功就返回当前session对象,匹配失败,就创建一个新的session.     *   都是底层实现*//*当前方法可以判断session是新的还是直接返回匹配以前的session*/if(session.isNew()){     /*存储数据在session对象*/    session.setAttribute("键","值");}else{    session.getAttribute("键");}/*设置session的销毁时间,是以秒作为单位的,这里的时间是最长不活动时间*/session.setMaxInactiveInterval(2000);/*立即销毁,注销功能就是立即销毁*/session.invalidate();

配置文件设置销毁功能:<session>    <!--这里的参数单位是分钟,只能是正整数,最长不活动时间间隔-->    <sesssion-timeout>1<session-timeout></session>

cookie默认是会话结束就消失,为了处理这个问题,覆盖getsession底层自己创建好的cookieCookie c  = new Cookie("JSESSIONID",session.getId());然后设置cookie的销毁时间c.setMaxAge(24*3600);

:上下午对象是所有servlet和所有用户都共享的,session是所有servlet共享的,但是每个用户是单独的session!

0 0