Web转发(forward)与重定向(redirect)

请求转发forward

-> xxServlet收到请求
-> 直接转发给yyServlet
-> yyServlet返回给客户端

整个过程中,客户端发出一个请求,收到一个响应。

在这里插入图片描述

实现:

方式一:利用RequestDispather接口中的forward方法实现请求转发。

RequestDispather实例对象
RequestDispather实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如Servlet,HTML文件,JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。

public class forwardServlet extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        System.out.println("forwardServlet's doGet");
        String path="testServlet";
        //1.调用HttpServletRequest的getRequestDispatcher()方法,调用时需要传入转发的地址;
        RequestDispatcher requestDispatcher=request.getRequestDispatcher(path);
        //2.调用HttpServletRequest的forward(request,response)方法进行请求的转发;
        requestDispatcher.forward(request,response);
    }
    
}

代码流程分析

  1. forwardServlet收到客户端的请求后,forwardServlet调用HttpServletRequest的getRequestDispatcher()方法,
  2. forward(request,response)方法进行请求转发,将请求直接转发给testServlet
  3. testServlet将响应返回给客户端。

请求重定向redirect

xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。
在这里插入图片描述

实现

利用HttpServletResponse的sendRedirect(path)方法实现请求重定向。

public class redirectServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("redirectServlet's doGet");
        String path="testServlet";
        response.sendRedirect(path);
    }
}

区别

转发 Forward重定向 sendRedirect
服务器端的跳转客户端的跳转
服务器直接将请求转发到其他JSP或者Servlet服务器会返回客户端一个响应报头和新的URL地址
参数的信息原封不动的传递原来的参数信息如果服务器没有特殊处理就不存在了
请求转发不知道,他只需要有返回即可;请求重定向,前端知道后端访问了多少个servlet
请求转发始终显示的是原来的servlet,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的重定向会改变地址栏的url地址,会直接显示出被重定向之后的结果,也就是说重定向可以看见目标页面的URL
请求转发只能在自己项目内转发,不可以到外部地址方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源
使用转发后,之前的request中存放的变量不会失效,就像两个页面拼在了一起,调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程使用重定向后,之前的request中存放的变量全部失效,并进入一个新的request作用域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值