请求转发与重定向

文章详细对比了JavaServlet中的请求转发和重定向。请求转发在地址栏不变的情况下实现服务器内部数据共享,而重定向是浏览器级别的跳转,导致地址栏变化且请求域数据无法共享。在示例中,请求转发能成功传递请求域数据,而重定向则不能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请求转发与重定向

一.请求转发

  • 请求转发地址栏不变,这是一次请求

  • 请求转发是服务器内部行为

  • 当做域对象使用,即相当于容器,可以装载数据

  • 两个servlet中请求域数据在一次请求转发中==共享==

  • doGet()只能向另外一个Servlet的doGet()方法中进行请求转发,doPost()同理,否则报错:

    HTTP Status 405 - HTTP method GET is not supported by this URL,如图所示:

    在这里插入图片描述

@WebServlet("/ser1")
public class DispatcherServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("1 接收请求");
        System.out.println("2 调用业务层处理数据");
        System.out.println("3 进行重定向页面跳转");
        //向请求域中存入数据 【name:张三】
        req.setAttribute("name", "张三");
        req.getRequestDispatcher("/ser2").forward(req, resp);
    }
}


@WebServlet("/ser2")
public class DispatcherServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查看重定向是否可以取出请求域中的数据
        Object name = req.getAttribute("name");
        System.out.println(name);
        System.out.println("4 重定向跳转成功");
    }
}

/**
控制台输出内容:
    1 接收请求
    2 调用业务层处理数据
    3 进行重定向页面跳转
    张三
    4 重定向跳转成功
*/

浏览器端行为:

在这里插入图片描述

二.重定向

  • 重定向是响应重定向,是浏览器行为
  • 两次请求
  • 地址栏会变化
  • 请求域数据无法共享
@WebServlet("/ser1")
public class DispatcherServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("1 接收请求");
        System.out.println("2 调用业务层处理数据");
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        resp.sendRedirect(contextPath + "/ser2");
    }
}


@WebServlet("/ser2")
public class DispatcherServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object name = req.getAttribute("name");
        System.out.println(name);
        System.out.println("3 查询数据");
    }
}

//控制台输出内容
/**
    1 接收请求
    2 调用业务层处理数据
    3 进行重定向页面跳转
    null
    4 重定向跳转成功
*/

浏览器行为:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值