请求转发和重定向

1、请求的转发

什么是请求的转发? 请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
在这里插入图片描述

public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 获取请求的参数(办事的材料)查看
        String username = req.getParameter("username");
        System.out.println("在Servlet1(柜台1)中查看参数(材料):" + username);

        // 给材料 盖一个章,并传递到Servlet2(柜台 2)去查看
        req.setAttribute("key1","柜台1的章");

        // 问路:Servlet2(柜台 2)怎么走
        /**
         * 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到IDEA代码的web目录<br/>
         *
         */
             RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        //请求转发可以到达WEB-INF/目录下(浏览器是不能直接访问服务端WEB-INF下目录下的,该目录受保护),但是不能转发离开本工程
//        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/form.html");
//        RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");

        // 走向Sevlet2(柜台 2)
        requestDispatcher.forward(req,resp);

    }
}




public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求的参数(办事的材料)查看
        String username = req.getParameter("username");
        System.out.println("在Servlet2(柜台2)中查看参数(材料):" + username);

        // 查看 柜台1 是否有盖章
        Object key1 = req.getAttribute("key1");
        System.out.println("柜台1是否有章:" + key1);

        // 处理自己的业务
        System.out.println("Servlet2 处理自己的业务 ");
    }
}

2、请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。

  • 请求重定向的第一种方案:
    // 设 置 响 应 状 态 码 302, 表 示 重 定 向 , 已 搬 迁 ) resp.setStatus(302);
    // 设 置 响 应 头 , 说 明 新 的 地 址 在 哪 里
    resp.setHeader(“Location”, “http://localhost:8080”);

  • 请求重定向的第二种方案(推荐使用):
    resp.sendRedirect(“http://localhost:8080”);
    在这里插入图片描述

public class Response1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("曾到此一游 Response1 ");

        req.setAttribute("key1", "value1");
/*
        //方式一:
        // 设置响应状态码302 ,表示重定向,(已搬迁)
        resp.setStatus(302);
        // 设置响应头,说明 新的地址在哪里
        resp.setHeader("Location", "http://localhost:8080/07_servlet/response2");
        //resp.setHeader("Location", "http://localhost:8080");
        */

        
        //方式二:推荐使用,因为302固定的
        resp.sendRedirect("http://localhost:8080");
    }
}

public class Response2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getAttribute("key1"));
        resp.getWriter().write("response2's result!");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值