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()的区别?