探讨下request的生命周期

1)如果使用request.getRequestDispatcher().forward() 这种方式进行跳转页面,前后页面共享一个request,存储在request里面的数据也会一起发送过去下一个页面, 。
2)如果用response.sendRedirect()是重新定向,前后页面不是一个request。

你在页面中写的request,当这个jsp页面被servlet容器编译成servlet,再生成html流,通过response输出到前端时生命周期才算结束,你的request在编译、执行期间都是有效的,这次请求响应的周期直到response.write才算结束。不要弄混淆,你写的JSP和用户在前端看到的并不是同一个东西,JSP只是脚本,用户看到的是脚本解释执行后输出的结果

这次请求响应的周期直到response.write才算结束"-----你的意思是当响应完成request才消失
是的,否则怎么能称为请求-响应。你在JSP中写的request,并没有脱离这次请求的服务端,JSP中的变量、标签等等都会在服务端解释完后再write到客户端,这才算响应完成
你可以设置request里面的数据存活时间。Request.setTime(“httpwwwzhishajihaocom”,1232322);

当从一个jsp发出一个request,即表明了这个request生命周期的开始,当到达action之后一般有两种处理request的方式,一种为request.getDispatcher.forward,一种是response.sendRedirect.
对于request的forward,该request的生命周期将会继续延续下去,当采用forward如果到达JSP页面,那么之前从第一个JSP页面中发送出来的request的消息将仍然存在,新的页面同样能够取得该request里所包含的一些信息,比如之前的JSP发送request中所包含的参数信息.事实上,它们是同一个request.

而如果是使用response.sendRedirect那么该request的生命周期将结束.

 对于request,对request信息的传递,只有setAttribute()这一个方法,该方法将设置一个Object对象到request中.

但是,如果当一个request是从jsp从发出,包含的信息段为param1=test这样的方式,那么只能通过getParameter()得到,getAttribute()是得不到param1的value的.
再次,对于JSP的EL表达式, 这 中 方 式 只 能 得 到 s e t A t t r i b u t e 中 的 值 , 因 此 当 从 一 个 J S P 发 送 r e q u e s t 到 达 a c t i o n 并 且 被 f o r w a r d 到 新 的 J S P 中 时 , 如 果 想 在 该 J S P 中 取 得 J S P 发 送 时 的 参 数 信 息 需 要 写 为 这 种 形 式 : {}这中方式只能得到setAttribute中的值,因此当从一个JSP发送request到达action并且被forward到新的JSP中时,如果想在该JSP中取得JSP发送时的参数信息需要写为这种形式: setAttribute,JSPrequestactionforwardJSP,JSPJSP:{param.patam1}.

我们都知道jsp中传值 会涉及到 request,session,application这三个容器。
当我们想做一些缓存或者存储一些全局变量时,就要考虑到它们的生命周期。
我们也有会疑惑一台计算机上打开同一WEB应用是否只产生一个session?

我们可以做对比了解:

application
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

session
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

打开一个浏览器请求一个网站的页面后,Session开始,当session超过时间限制(一般是20分种)后,session注销而失效或是人为使用session.invalidate();使用session失效。

用浏览器打开一个web程序,一个浏览器窗口就会有一个session,且是唯一的,过了session的生存周期就没了,或者是你关了窗口也就没了。

不同浏览器的session在计算机中并不是同一个。

request
请求作用域,就是客户端的一次请求。比如访问某个页面,就是一次请求。页面访问结束,该页面的request就结束了

ps

由上可知,如果我们有一份比较大的数据想做缓存。可以使用application 或者 session。 但是 application 占用的是服务器的资源,需要自己写数据清除。session当用户缓存就比较简便,占用的是客户端资源,会自动失效。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值