首先我们来看今天所学应用到的一个例子,当我们做了一个登陆页面,提交表单后往往需要跳转到另外一个页面。这里可以用两个方法,方法如下:
1.response用法: response.sendRedirect("URL"); (是对服务器请求的响应)
2.request的用法: request.getRequestDispatcher("URL").forward(request, response); (是装载着客户端请求的信息集合)
但是两种用法是有所不同的。response跳转后:1.最终页面地址显示的是传过去的URL。2.这种方法是不能将发出跳转请求的页面原有的参数往后传递。3.可以跳转到与原有页面不在同一服务器上的外部站点。但是request跳转之后:1.页面显示的地址是发送请求的页面。2.可以将发送请求页面中的参数往后传递。3.这种方法只能跳转到处于同一服务器上的其他页面,不跳到外部站点。
造成上面结果原因如下:我们称前者为对服务器发出的请求所作出的一种响应动作,这种相应动作并没有把请求页面中的信息保存下来,这种做法叫做地址重定向;而后者则是看成就是页面发出的请求的一个实质载体,这个载体装载了请求页面中的表单信息集合,这个信息集合中的信息是可以被跳转后的页面所引用的,这种方法叫做转发。值得注意的是,HTTP协议是一种无状态的协议,所谓无状态是客户端与服务器端之间是没有维持一个一直存在的通路链接。往往是客户端发出请求后,服务器端进行处理完成并返回一个页面,任务完成就会断开链接通路。否则通路占用会造成网络拥堵,服务器崩溃。所以,重定向实际上是对服务器端发出了两次请求,第二次请求和第一次是独立的,所以无法取到第一次的信息。而后者是一次请求能够取到发出请求中的表单信息。
另外与request相类似的还有另外两个对象: session和application。三者的用法很相似,但是互不相同。
1.request,这种请求是一次性的,发出一次请求后,在服务器端可以取到这次请求的信息。但是当下一个request发过来时,想再对上次请求中的东西进行操作是取不到的。
2.session叫会话,顾名思义这是一个持续性的过程,是客户端与服务器之间多次请求与响应的过程。
第一次请求服务器时,由服务器创建,并创建了编号,将编号以cookie回传给客户端,相当于在服务器开辟了一个独立空间存放与这个浏览器之间的会话内容。
session销毁的时机:
a. 关闭浏览器一段时间后.
b. session.invalidate();
session.removeAttribute("");
c. 关闭服务器.
3.application 申请,他与session一样都是在服务器开辟了一个空间,用法大致相同。但是开辟的这个空间是公用的,可以看做是java中开辟的静态常量区,这里所存的请求信息,不止能提供不同的请求使用,还能提供给不同的浏览器之间发出的请求所使用。(session是只有同一个浏览器发出的才能够使用彼此请求留下的信息)
最后,为了应对http无状态的方法其实还有一种,不同于上边谈及的在服务器端动手,这个方法是在客户端方面动手。这个方法就是创建cookies,cookies相当于人的一个身份证,是当浏览器访问服务器时,服务器自动给分配的一个信息集,返回到客户端中存放好。当客户端下次再访问这个服务器时,将会把cookies的信息带上一起发过去服务器,服务器会根据cookies的信息进行匹配,判别这个来访者是谁。就好比我得到了服务器发来的身份证后,我拿着身份证再来访问你,你就可以根据我的身份证知道我是谁。从而保持了客户端和服务器的会话持久性。