servlet1请求转发至servlet2,那么servlet1里写的会话在servlet2里还有用吗?请解释下详细的过程 50
我自己写了一个测试代码如图:图1:servlet1,图2servlet2,图3servlet2的输出按书上的说法:servlet1中的响应对象的首部会有会话ID信息,其返...
我自己写了一个测试代码如图:图1:servlet1,图2 servlet2,图3 servlet2的输出
按书上的说法:servlet1中的响应对象的首部会有会话ID信息,其返回浏览器后,浏览器下次发送的请求也会包含会话ID。
但是servlet1中,请求对象并没有会话ID啊,请求转发后,还是同一个请求对象,那么为什么servlet2里可以从请求对象里读取出会话ID,找到之前的会话,得到之前会话的属性用户名呢? 展开
按书上的说法:servlet1中的响应对象的首部会有会话ID信息,其返回浏览器后,浏览器下次发送的请求也会包含会话ID。
但是servlet1中,请求对象并没有会话ID啊,请求转发后,还是同一个请求对象,那么为什么servlet2里可以从请求对象里读取出会话ID,找到之前的会话,得到之前会话的属性用户名呢? 展开
1个回答
展开全部
session是域对象,相当于一个仓库,任何servlet都可以获取里面的东西,servlet1存的数据进去,servlet2当然可以拿到。
会话id是用来找到对应的session的,就是说你从浏览器过来根据这个仓库地址(id)才能找到对应的仓库(session)。
而且,你用的是请求转发(一次请求)是在服务器内操作,跟会话id不相干,重定向(两次请求)才会用到会话id。
会话id是用来找到对应的session的,就是说你从浏览器过来根据这个仓库地址(id)才能找到对应的仓库(session)。
而且,你用的是请求转发(一次请求)是在服务器内操作,跟会话id不相干,重定向(两次请求)才会用到会话id。
更多追问追答
追问
您好~谢谢您的回答,我还有点不懂。
servlet2中这行代码:Httpsession session=req.getsession()。
我看书后的理解是:如果请求对象req的首部信息包含会话ID(cookie),那么容器会按照会话ID找到对应的会话,如果请求对象req首部没有会话ID,那么就会新建一个会话。您也说了这个req还是之前那个请求对象,那么应该会新建一个会话啊
追答
理解错了,你首先要知道session是什么,他的作用范围是什么。关闭服务器或者关闭浏览器或者换个浏览器或者过半小时自动销毁才会导致session失效(销毁或者找不到他了),要不然这个session就一直存在,你创建100个servlet都能取到。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询