转发与重定向
在做页面的请求与响应的时候我们多用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路径下的文件。