转发与重定向

转发与重定向

在做页面的请求与响应的时候我们多用request与response进行操作,而我们大家也知道,request是表示用户发向服务器的请求,而response是对用户请求的一个响应。


HttpServletRequest

表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法。

功能:getParameter()获取请求参数
getContextPath()获取当前项目名
request..getRequestDispatcher(“/1.html”).forward(request, response);可以实现转发功能
注意:“/”代表的是相对于项目的根目录 http://主机地址:端口号/项目名/


HttpServletResponse

表示服务器响应给浏览器的响应报文,由服务器创建然后作为参数传递给我们doget,dopost方法。

功能:response.getWriter().println("<h3>hello world!</h3>");
可以返回给浏览器一个页面或者一个页面片段

response.sendRedirect("/项目名/页面或servlet路径");

注意:“/”代表的是相对于服务器的根目录 http://主机地址:端口号/


转发与重定向的区别

举例解释:关于转发和重定向,通俗的讲转发就像是你向售后技术支持打电话问问题,打过去是客服小王接的,但是小王无法解决,他让你等会儿,别挂电话,然后他去把问题告诉小李,让小李过来帮你解决,虽然换了人解决可是还是在这个售后处解决了问题。而重定向呢,就是小王说这个不归他们管,我们处理不了,让你打给12315投诉吧。然后你打电话给12315投诉解决了。大概就是这样的。

因此在转发的时候你的地址栏内容不会变,发过去的请求也在,也就是说request中的内容没有改变,可以使用request进行值传递。

而重定向的过程地址栏发生改变,你的请求也在重定向的时候丢失,原因是在第二次请求时,是再一次对服务器的访问,服务器会重写request内容。

Tables 转发 重定向
发生地 服务器 浏览器
请求次数 浏览器一次请求,一次响应 浏览器两次请求,两次响应
地址栏是否发生变化 无变化 有变化
速度
根目录地址 相对于项目的根目录http://主机地址:端口号/项目名/ 相对于服务器的根目录http://主机地址:端口号/

注意:动态web项目WEB-INF路径下的文件,只能以转发的方式才能访问,重定向的方式访问不了WEB-INF路径下的文件。

原文地址:https://www.cnblogs.com/mazhitao/p/7445537.html