转发和重定向
有个现象,就是你进入了某个网页,然后按浏览器的回退,会有个提示,什么什么即将丢失之类的,可能是个表单,或者是啥未保存结构。
不过一般都tmd点确定了,老子要回退,当前页面的东西当然不要了。有时候,进入某个页面,也会有这个提示。其中,回退出现的提示,并非是人为代码写的,而是浏览器自身的判断。说明,你要回退的地址,和现在的地址,这两个地址之间,是重定向关系。说明你从上一个地址过来的时候,经过了重定向。
访问servlet或者action的时候,后台在return的时候,有两种写法,一种是 rander.toxxx jsp,还有一种是 location.toxxx.jsp。一般,在中间逻辑中,还会出现 xxx .attr(xxx,yyy)的情况,写全了,是setAttribute。
然后就蒙了,一会set的是Attribute,一会是Paramter,我们现在已经很少用这种语法了,也不重要,之所以我要提,因为上面的两句,一种叫做转发,一种叫做重定向。
将这个参数 ,放到了attr或者param中的时候,如果下一个页面能收的到,我们叫做转发,如果下一个页面收不到上一个页面的参数,那么我们叫做重定向。
官方解释是这样的,转发是一次跳转,每次跳转都会带着上一次的参数,所以叫做转发,因为内容还在,重定向是两次跳转,会丢弃之前的参数,是一个完全新的渲染页面。所以,如果用了重定向,你前面的参数还要的话,jsp模式下,就需要将参数放到session中,然后再从session中取,而如果是转发的话,参数本身是在request域中的,直接可以从request中取。
实际上,可以简单的这样理解。request是一次请求,该请求的参数就存在http协议内,http协议简单的说有两种请求方实,一种是get,一种是post;get的方式,其请求内容都在url里,也就是参数是放在url里写的,那个?、后面,通过&连接的key和value;post的方式,所有的请求内容除了在url里之外,还有一部分是隐藏的。因此,get和post的区别在于,get是明文请求,post是暗文请求。url的长度是 255,所以get的请求的参数总长度是255。post将所有的请求参数都放到了http协议的body中,长度是无限制的,因此其url中只有url,一般咩有参数,也可以手动加。
头就好比脸的概念,不可能认人用脸,但是脸无限长;至于体,是有穿衣服的,不脱了不知道细节,虽然能脱,但是总比看脸认人要慢。而get,实际上是认人的时候,直接手接手就拿过来了。而post是邮递,是有包的,不拆包,看不见。那个包,就是参数了