java会结账的服务器_java

保存会话数据的两种技术,第一种已经写了,今天重点写

Session

技术;

Cookie

Cookie

是客户端技术,服务器把每个用户的数据以

cookie

的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的

web

资源时,就会带着各自的数据去。这样,

web

资源处理的就是用户各自的数据了。

Session

Session

是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的

session

对象,由于

session

为用户浏览器独享,所以用户在访问服务器的

web

资源时,可以把各自的数据放在各自的

session

中,当用户再去访问服务器中的其它

web

资源时,其它

web

资源再从用户各自的

session

中取出数据为用户服务。

首先了解一下什么是Session

技术:

使用

Cookie

和附加

URL

参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。

Session

技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 。

客户端需要接收、记忆和回送

Session

的会话标识号,

Session

可以且通常是借助

Cookie

来传递会话标识号

76247567_1

Session

的跟踪机制 :

Servlet API

规范中定义了一个

HttpSession

接口,

HttpSession

接口定义了各种管理和操作会话状态的方法。

HttpSession

对象是保持会话状态信息的存储结构,一个客户端在

WEB

服务器端对应一个各自的

HttpSession

对象。

WEB

服务器并不会在客户端开始访问它时就创建

HttpSession

对象,只有客户端访问某个能与客户端开启会话的

Servlet

程序时,

WEB

应用程序才会创建一个与该客户端对应的

HttpSession

对象。

WEB

服务器为

HttpSession

对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给

WEB

服务器,

WEB

服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的

HttpSession

对象。

76247567_2

WEB

应用程序创建了与某个客户端对应的

HttpSession

对象后,只要没有超出一个限定的空闲时间段,

HttpSession

对象就驻留在

WEB

服务器内存之中,该客户端此后访问任意的

Servlet

程序时,它们都使用与客户端对应的那个已存在的

HttpSession

对象。

HttpSession

接口中专门定义了一个

setAttribute

方法来将对象存储到

HttpSession

对象中,还定义了一个

getAttribute

方法来检索存储在

HttpSession

对象中的对象,存储进

HttpSession

对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

Session

是实现网上商城的购物车的最佳方案,存储在某个客户

Session

中的一个集合对象就可充当该客户的一个购物车。

Session

的超时管理

WEB

服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,

WEB

服务器还要保留与之对应的

HttpSession

对象。

随着时间的推移而不断增加新的访问客户端,

WEB

服务器内存中将会因此积累起大量的不再被使用的

HttpSession

对象,并将最终导致服务器内存耗尽。

WEB

服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,

WEB

服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的

HttpSession

对象变成垃圾。

如果客户端浏览器超时后再次发出访问请求,

WEB

服务器则认为这是一个新的会话的开始,将为之创建新的

HttpSession

对象和分配新的会话标识号。

会话的超时间隔可以在

web.xml

文件中设置,其默认值由

Servlet

容器定义。

30

WEB

开发中,服务器可以为每个用户浏览器创建一个会话对象(

session

对象),注意:一个浏览器独占一个

session

对象

(

默认情况下

)

。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的

session

中,当用户使用浏览器访问其它程序时,其它程序可以从用户的

session

中取出该用户的数据,为用户服务。

Session

Cookie

的主要区别在于:

Cookie

是把用户的数据写给用户的浏览器。

Session

技术把用户的数据写到用户独占的

session

中。

Session

对象由服务器创建,开发人员可以调用

request

对象的

getSession

方法得到

session

对象。

76247567_3

今天讲的总的可以归为三点:

第一个就是

首先是

request.getSession();

方法,如果是第一次获取,原先没有

Session

技术;服务器会自动向浏览器返回一个

id;

HttpSession session=request.getSession();//

可以带参数,如果是

true

代表没有自动创建,

false

代表没有也不创建;

session.setAttribute(“name”,”nameValue”);//

session

属性赋值;

然后在创建一个

Servlet

类,来获取

session

的值;

首先解决乱码问题;

response.setContentType(“text/html;charset=utf-8”);

PrintWriter out = response.getWriter();

//

获取

session

id

HttpSession session = resquest.getSession();

String  value = session.getAttribute(“name”);

out.print(“购买的商品是”+value);

第二种就是

把这两个弄成一个

html

文件,进行超连接,第一个叫购物。第二个叫结账

有这个一种情况,你购物完之后,获取一个

id

但是不小心关了,再重新点开,打开结账发现值为空,是不是很纠结;所以解决一下这个问题,

需要在购物内加入一个

Cookie

来保存这个

id

到本地;

创建

cookie

应该都会了吧,在这里也就不详细介绍了,

首先获取一个

session

id

,放到

cookie

里保存;

String id  = session.getID();

Cookie cookie = new Cookie(“JESSIONID”,id);//

参数值与

session

一致

cookie.setMaxAge(30*60);//

与浏览器保存时间一致;

response.addCookie(cookie);

第三种就是用户把浏览器的

Cookie

设置关闭,导致

cookie

无法使用;

这个需要使用

URL

重写;

IE

禁用

Cookie

后的

session

处理

解决方案:

URL

重写

response. encodeRedirectURL(java.lang.String url)

用于对

sendRedirect

方法后的

url

地址进行重写。

response. encodeURL(java.lang.String url)

用于对表单

action

和超链接的

url

地址进行重写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值