Java请求转发和重定向的区别

下图上部分的流程即请求转发,下部的即为重定向。

请求转发 

当A想获取C的数据,先找到B,B去C找,C返回数据给B,B再传递给A。地址栏不会发生变化。

(整个过程属于一次请求)

重定向 

一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程叫做重定向。地址栏会发生变化。(整个过程属于两次请求)

重定向和请求转发的区别

相同点

都会实现页面的跳转 。

不同点

请求转发的时候url不会发生变化。

重定向的时候url会发生变化,变化到他跳转页面的url。

​编辑

请求转发实现代码 

public class ServletDemo2 extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ServletContext context = this.getServletContext();

        System.out.println("进入了请求转发");

//        请求转发

//        request 请求 Dispatcher

//        转发的请求路径

//        我们请求的可能是RD 但是实际上走的是GP 即根据下面的uml进行实际显示

//        ****路径没有发生改变 与后面重定向进行区分***

        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/GP");

//        调用forward方法 将传进来的req即请求 resp即响应 进行转发

        requestDispatcher.forward(req,resp);

    }

上述代码请求的ur路径为/GP,经过运行得出如下图所示结果,验证了请求转发的正常运行。

编辑

编辑

编辑

​重定向的代码

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.setHeader("location","/1/d");
//        resp.setStatus(HttpServletResponse.SC_FOUND); 或者括号内直接写302
        resp.sendRedirect("/1/test"); //重定向
    }

重定向运用了resp.sendRedirect("转发的路径名")方法,等价于代码中的注解部分,先获取响应头,再设置http响应码。

跳转后可以查看网页的状态码

如图所示,跳转后的url改变了,变成了再后端设置好的重定向页面的url。

如图可视,可以看出状态码为302,location为跳转的地址,我们可以到源码中找一下302

刚开始写博客,如果有什么不对的地方还劳烦各位大佬指出,感激不尽!!

Java中的请求转发重定向都是用于在不同的Servlet之间进行页面跳转的方式,但它们的实现方式效果是不同的。 请求转发是指在当前Servlet中处理完请求后,将请求转发给另一个Servlet进行处理,转发后的请求由另一个Servlet来产生响应。请求转发的代码如下: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("/b"); dispatcher.forward(request, response); ``` 其中,`/b`是要转发到的Servlet的路径,`request``response`是当前Servlet请求响应对象,转发后的请求响应对象也是这两个对象。 请求转发的特点是:转发后的请求响应对象与原始请求响应对象是同一个,因此它们可以共享请求响应的信息,比如请求参数、请求属性等。此外,请求转发是在服务器端完成的,客户端并不知道发生了转发,因此地址栏中的URL不会改变。 重定向是指在当前Servlet中处理完请求后,将请求重定向到另一个Servlet进行处理,重定向后的请求由浏览器重新发起,由另一个Servlet来产生响应。重定向的代码如下: ```java response.sendRedirect("/b"); ``` 其中,`/b`是要重定向到的Servlet的路径,`response`是当前Servlet的响应对象。 重定向的特点是:重定向后的请求响应对象与原始请求响应对象是不同的,因此它们不能共享请求响应的信息。此外,重定向是在客户端完成的,因此地址栏中的URL会改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值