阿龟在奔跑 2021-09-13 11:53 采纳率: 0%
浏览 54

JavaWeb中,请求转发过程中的Request对象在不同的Servlet中地址不同?

利用RequestDispatcher对象进行请求转发,在这转发过程中的多个Servlet中打印它们的request对象和response对象,为什么request对象的地址全都不一样?而response对象的地址却全都相同?
不是说请求转发过程中,全程只有一次请求,对应一个request对象和一个response对象吗?

第一个Serrvlet的代码:

public class DispatcherServlet1 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("-------------------------------------这里是Servlet1的doGet()-------------------------------");
        System.out.println("Servlet1中的request:" + request);
        System.out.println("Servlet1中的response:" + response);

        // 获取请求转发的对象
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/dispatcher2");

        // 走向请求转发的对象
        requestDispatcher.forward(request,response);

        // 业务流程走完,请求往回调,离开服务器时执行:
        System.out.println("这里是Servlet1,此时所有的业务流程都已走完...");

    }
}

第二个Servlet的代码:

public class DispatcherServlet2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("-------------------------------------这里是Servlet2的doGet()-------------------------------");
        System.out.println("Servlet2的request:" + request);
        System.out.println("Servlet2中的response:" + response);

        // 办理自己的业务
        System.out.println("Servlet2 为请求办理相关业务...");

        request.setAttribute("request",request);

        //再一次转发
        request.getRequestDispatcher("/dispatcher3").forward(request,response);

    }
}

第三个Servlet的代码:

public class Dispatcher3 extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("--------------------------这里是Dispatcher3...-------------------------");
        System.out.println("Servlet3中的request: " + request);
        System.out.println("Servlet3中的response:" + response);

        request.getRequestDispatcher("/WEB-INF/html/protectedForm.html").forward(request,response);
        System.out.println("流程结束,页面返回....");

    }
}

以上三个Servlet,从DispatcherServlet1 请求转发到 DispatcherServlet2 ,DispatcherServlet2 再次请求转发到Dispatcher3, 最后Dispatcher3 请求转发到 一个静态的html,结束整个过程返回结果。

以下是运行截图:

img

从运行结果可以看出,三个Servlet中的response对象地址都相同,符合预期。但三个request对象却各不相同,实在想不明白,希望能得到各位兄弟解答,感谢!

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2021-09-13 12:00
    关注

    request请求转发地址不变,指的是客户端的url地址不变。
    请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀