JavaWeb(四)-----Web 应用程序状态管理

目标

  • 状态管理概述
  • 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[] 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底层自己创建好的cookie
Cookie c  = new Cookie("JSESSIONID",session.getId());
然后设置cookie的销毁时间
c.setMaxAge(24*3600);

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

URL 重写

URL地址重写能够取得置于cookie中的会话,并把会话ID附加到访问应用的各个URL最后。

URL重写是容器自动完成的,但是需要我们对URL进行编码才有效。

URL重写方法:

response.encodeURL();

response.encodeRedirectURL("");

具体操作:

/*获取工程路径*/
String path = request.getContextPath()+request.getServletPath()

String newURL = response.encodeURL(path);

/*第二个方法 结果都是一样的。对重定向的URL进行编码*/
/*cookie和url都工作的时候,cookie优先,所以以后的操作过程中,为了防止用户屏蔽cookie,可以把两个技术都用在一起*/
String newURL2 = response.encodeRedirectURL(path);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值