您的位置:首页 > 编程语言 > Java开发

java web 中转发和重定向区别(通俗化)

2017-04-06 21:50 260 查看
  首先http为了简单起见在设计时一定是一个request,然后一个response,服务器不会主动给你发送消息,那么重定向只是两组请求组合而来罢了,弄明白这点,就差不多了.

  转发是一个request过来,服务器经过一系统计算(即执行controller),然后返回另一个内部page的html代码,当然你请求头中的数据(参数)存在于服务器内存中,那么他想怎么利用参数就怎么利用了.在转发的页面能够取到(只要服务器想).涉及两个url.但是,浏览器只会显示第一个请求的url,这个过程是服务器内部转发,可以是另一个页面,不过,url不发生变化.

  (request)小明->10086:"问你个事呗,联通电话多少啊?"[联通电话是多少这个就是传过来的参数,10086就是服务器]

  (dispatcher)10086->系统,输入条件就是联通的电话是多少,这是10086客服人员自己默默做的,他不会告诉你.[通过参数计算,当然也可以无参直接跳转]

  (foward或者response)10086->小明:"哦,联通的电话是10000".(1000这个结果即转发的页面,10086直接告诉你,让你以为他是知道的,实际上他中间问了系统)

  那么在进行java web编程时,转发目的页面是可以通过request对象取到请求的的参数的,可以看成是response对request的回应,而具体转到哪个页面是服务器内部的行为,只负责把请求处理好.

  重定向是服务器300类状态码,一个request过来(还是可以通过url传参,服务器会拿到),服务器一个response回去,指示浏览器需要再次请求一个url,从这里开始就是一次完整的请求了,然后服务器返回请求页面.即两次请求,两次响应.这整个过程称为重定向

request->response(携带重定向地址)->浏览器request(此时请求url即为上一个resonse传过来的)->response(返回300类状态码)

而这个过程是浏览器与服务器的过程,用户体会不到,但是可以通过url的改变判断是一个新的地址,即重定向

  (request)小明->10086:"问你个事呗,联通电话多少啊?"[联通电话是多少这个就是传过来的参数]

  (response)10086->小明:"你丫有病啊,问移动联通的电话多少,不知道,去问电信12580";[即重定向url是12580]

  (request)小明很听话,默默的做了.小明->12580:"联通电话多少?"[一个新的request到服务器]

  (response)12580->小明:"问我就对了嘛,联通电话是10000"[拿到结果]

本质离不开http的基本过程,一个request对应一个response
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: