在做页面的请求与响应的时候我们多用request与response进行操作,而我们大家也知道,request是表示用户发向服务器的请求,而response是对用户请求的一个响应。
关于转发和重定向,通俗的讲转发就像是你向售后技术支持打电话问问题,打过去是客服小王接的,但是小王无法解决,他让你等会儿,别挂电话,然后他去把问题告诉小李,让小李过来帮你解决,虽然换了人解决可是还是在这个售后处解决了问题。而重定向呢,就是小王说这个不归他们管,我们处理不了,让你打给12315投诉吧。然后你打电话给12315投诉解决了。大概就是这样的。
因此在转发的时候你的地址栏内容不会变,发过去的请求也在,也就是说request中的内容没有改变,可以使用request进行值传递。
而重定向的过程地址栏发生改变,你的请求也在重定向的时候丢失,原因是在第二次请求时,是再一次对服务器的访问,服务器会重写request内容。
下面是转发和重定向的代码:
转发:
request.getRequestDispatcher("").forward(request, response);
重定向:
response.sendRedirect("");
谈到转发和重定向就不得不提一下其中的区别:
| 转发 | 重定向 |
请求次数 | 浏览器仅发送一次请求、一次响应 | 发送两次请求,两次响应 |
地址栏是否变化 | 地址栏不发生变化 | 地址栏变成重定向的地址 |
范围 | 只能转到本项目的Servlet或其他页面 | 能重定向到不只本项目的Servlet或者其他页面 |
实施及地址 | 是有服务器转发的,根目录为项目地址 | 是由浏览器再次请求,根目录是浏览器目录 |
*用到重定向和转发时要注意的问题:
在做增删改请求操作的时候不可用转发,只能用重定向
原因:由于转发之后地址栏不变,请求(request)内容不变,再次刷新页面的时候,请求将再次发送,造成重复操作执行,造成错误。
在做查询操作时,只能转发,不能使用重定性。
原因:重定向后请求会将原本的查询请求覆盖,刷新之后将得不到要查询的数据。
以上为个人学习总结,欢迎技术大牛路过指定批评。