Servlet转发和重定向区别

转发(forward)

1.新建AServlet通过转发器转发到BServlet:

@WebServlet(name = "AServlet", urlPatterns = "/AServlet")
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //转发到Bservlet
        request.getRequestDispatcher("BServlet").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

2.新建BServlet,输出到网页

@WebServlet(name = "BServlet",urlPatterns = "/BServlet")
public class BServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("this is Bservlet");
    }

结果:
结果显示 ip地址栏并未发生改变

在这里插入图片描述

重定向(sendRedirect):

1.新建AServlet重定向到BServlet

@WebServlet(name = "AServlet", urlPatterns = "/AServlet")
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //重定向到BServlet
        response.sendRedirect("BServlet");
    }

结果:
我们可以看到ip地址栏发生了改变
在这里插入图片描述

总结:

1.请求转发之间是共享同一个request(一次请求)
原理:当浏览器向服务器请求AServlet时,tomcat服务器会指向Aservlet,之后内部转发(Fword)到BServlet

我们在AServlet中保存一个键值对转发到BServlet中,会发现在BServlet中可以拿到键值对的值:

在这里插入图片描述

在这里插入图片描述

2.重定向servlet之间有各自独立的request对象**(两次请求)
原理:当浏览器向服务器请求AServlet时,tomcat服务器会指向AServlet中,通过SendREdirect重定向至BServlet,此时服务器会向客户端返回一为302的状态码,要求客户端重新请求BServlet,客户端会再次发送请求BServlet;
我们同样的保存键值对后重定向到BServlet中发现拿不到键值对的值:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值