JavaWeb Servlet请求转发与请求重定向 图 + 文 + 代码 详解!!!

Servlet请求转发与请求重定向

请求转发

请求转发是指,服务器获取请求后,通过多个Servlet程序来处理请求的过程

请添加图片描述

代码实现

Servlet1

public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取参数
        System.out.println("Servlet1获取的参数:" +req.getParameter("p"));
        //设置标记
        req.setAttribute("mark","replay");
        //获取调度器 参数为转发地址
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/Servlet2");
        //转发
        requestDispatcher.forward(req,resp);
    }

Servlet2

public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取参数
        System.out.println("Servlet2获取的参数:" + req.getParameter("p"));
        //检查标记(标记存储于request域中,对于同一个request,attribute共享,这就使得在请求转发中多个servlet程序可以共同查看)
        Object mark = req.getAttribute("mark");
        System.out.println("获取标记:" + mark);
        //有标记进入数据的二次处理
        if ("replay".equals(mark)){
            System.out.println("处理数据");
        }
    }

结果:

请添加图片描述

请求转发的特点

  • 请求转发浏览器地址不改变
  • 请求转发是一次请求(一进一出)
  • 请求转发共享request中的数据(因为是一次访问,不论几个servlet,request都是同一个,所以储存在request中的数据被多个共享)
  • 请求转发可以访问WEB-INF目录 (Tomcat介绍及其使用详解.md 受访问限制的目录,浏览器无法直接访问)
  • 请求转发不能访问外部文件(因为请求转发调度器从’/‘开始访问,’/'代表工程路径,这意味着请求转发只能访问工程目录下的文件)

请求重定向

请求重定向是指,之前发送的请求目标已经过时,需要重新发送请求到另一个目标

请添加图片描述

代码实现

ServletRD1

public class ServletRD1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletRD1已经过时了,现在重新定向到ServletRD2");
        //设置状态码,重定向状态码为302
        resp.setStatus(302);
        //通过响应头设置重定向目标(Location)
        resp.setHeader("Location","http://localhost:8080/WebTest02_Maven/ServletRD2");
    }
}

ServletRD2

public class ServletRD2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        resp.getWriter().write("请求重定向成功");
    }
}

请添加图片描述

请添加图片描述

请求重定向特点

  • 请求重定向之后浏览器地址改变
  • 请求重定向是多次请求(多进多出)
  • 请求重定向中request域资源不共享(因为是多次请求,所以是多个request,request域资源只有同一个request时才会共享)
  • 请求重定向无法访问WEB-INF(浏览器访问受限的目录)
  • 请求重定向可以访问外部资源(与请求转发不同,请求重定向不需要调度器,不是在自己的工程目录下,而是重新设置一个发送请求目标,可以访问除受限资源之外的任何资源)

WEB-INF(浏览器访问受限的目录)

  • 请求重定向可以访问外部资源(与请求转发不同,请求重定向不需要调度器,不是在自己的工程目录下,而是重新设置一个发送请求目标,可以访问除受限资源之外的任何资源)

尚硅谷学习笔记总结!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值