请求转发与重定向的区别

请求转发与重定向的区别请求转发 Forward 请求转发 Forward 一种在服务器内部的资源跳转方式简单来说 当客户浏览器发送 http 请求到 web 服务器中 web 服务器接受请求后调用内部 servlet 方法完成请求处理和转发资源给同一个 web 容器下的另一资源做处理 最后将目标资源 response 给客户 工作原理及特点比如图中 web 容器 Tomcat 有两个资源 A 和 B 若浏览器请求资源 A 的时候 资源 A 处理了一部分 然后跳转到资源 B 让资源 B 接着处理 资源 B 处理完成后做出响应到服务器 资源 A 跳转到资源 B 的这个过程就

请求转发(Forward)

请求转发(Forward):一种在服务器内部的资源跳转方式

简单来说,当客户浏览器发送http请求到web服务器中,web服务器接受请求后调用内部servlet方法完成请求处理和转发资源给同一个web容器下的另一资源做处理,最后将目标资源response给客户。

工作原理及特点
在这里插入图片描述
比如图中web容器(Tomcat)有两个资源(A和B),若浏览器请求资源A的时候,资源A处理了一部分,然后跳转到资源B,让资源B接着处理,资源B处理完成后做出响应到服务器。资源A跳转到资源B的这个过程就叫转发。




实现代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //获取请求转发器对象,调用forward()方法,请求转发 RequestDispatcher requestDispatcher = request.getRequestDispatcher("跳转资源的路径").forward(requset,response); } 

1. 请求转发资源间共享数据

图中资源A处理了一部分数据后把其他数据转交给资源B处理,所以在这过程中资源之间数据是共享的。

void setAttribute(String name,Object o)//存储数据到request域中 Object getAttribute(String name)//根据key,获取值 void removeAttribute(String name)//根据key,删除该键值对 

2. 浏览器地址栏路径不发生变化,只能转发到当前服务器的内部资源,浏览器只做了一次请求

在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

Response完成重定向(Redirect)

重定向(Redirect):一种资源跳转的方式

一般用来解决登录进入主页、跨域访问、系统维护等等都使用重定向技术,比如当系统进行维护时,用户若发起请求,系统将会告诉浏览器重定向访问指定的url。

简单来说,当浏览器发起请求给资源A时,资源A发现浏览器发起的请求自身处理不了,但是知道资源B可以处理,这时候资源A就会告诉浏览器说这次请求处理不了,请找资源B处理并且告诉资源B的访问路径,浏览器会自动去请求资源B。

工作原理及特点
在这里插入图片描述
客户浏览器发送http请求后,web服务器中资源A接受请求后无法处理,资源A将会发送302状态码响应及对应新的location(资源B)给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址。




实现代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    //旧方法 //response.setStatus(302); //response.setHeader("location","资源B的路径"); //其中资源B的路径需要添加虚拟目录 response.sendRedirect("资源B的路径"); } 

1. 浏览器地址栏路径发生变化

2. 可以重定向到任意位置的资源(服务器内部、外部均可)

3. 浏览器发起两次请求,不能在多个资源使用request共享资源

总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225891.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:18
下一篇 2026年3月17日 上午8:19


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号