forward 与 redirect 的区别

Posted caoxingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了forward 与 redirect 的区别相关的知识,希望对你有一定的参考价值。

一.请求转发(forward)

又叫做 直接转发方式,客户端和浏览器都 只发出一次请求、Servlet、html、JSP或其他信息资源,由 第二个信息资源响应该请求,在请求对象request,保存的对象对于每个信息资源是共享的。

语法:

request.getRequestDispatcher(path).forward(request, response);

特点:

  1.地址栏中的地址【不会】改变,通常看作是服务端的跳转

  2.只有一个请求

  3.资源是共享的

//也就是说两个Servlet中可以共享请求的资源,可以通过这段代码设置共享数据资源
request.setAttribute(String var1, Object var2);
//并通过这段代码获取传递的资源
request.getAttribute(String var1);

  4.【可以】访问WEB-INF中的资源

  WEB-INF文件夹是Java Web 应用的  默认安全目录, 即客户端无法直接访问,只有服务端可以访问的目录。如果想在页面中 直接访问  其中的文件,必须通过web.xml对访问的文件进行相应映射才能访问。

注:在实际的开发中,可以把不希望用户直接访问到的网页放在文件夹中通过  相应的映射进行访问

  5.请求转发【不能】跨域访问

二.URL重定向(redirect)

  又叫间接转发方式 ,实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器在向另外一个URL发出请求,从而达到转发的目的。

 语法:

response.sendRedirect(String location);

特点:

  1.地址栏中的地址【会】发生改变,通常看作是客户端跳转

  2.有两个请求

  3.在两个Servlet中不可以共享请求中的数据

  4.最终的响应都重定向后的 Servlet 决定,与之前的Servlet没有关系

  5.【不可以】访问WEB-INF中的资源

  6.请求重定向【能】跨域访问

总结:URL 重定向相当于是将重定向的资源路径,重新复制到浏览器地址栏中按下回车一样, 重新发送一次新的请求。

以上是关于forward 与 redirect 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Servlet API中forward()与redirect()的区别?

SERVLET API中forward()与redirect()的区别?

SERVLET API 中 forward() 与 redirect()的区别?

forward和redirect的区别

转发(forward)和重定向(redirect)的区别

forward和redirect的区别