web开发(八)转发,转发与重定向的区别

实现转发:

  • request对象方法获取转发器 RequestDispatcher getRequestDispatcher(“转发地址”)返回值就是转发器
  • 使用转发器对象的方法 forward(request,response)

图解:

在这里插入图片描述

代码实现:

package com.ccc.demo01Dispatcher;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/servlet1")
public class Servlet1 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet1 我是刘备");

        //1.获取转发器RequestDispatcher
        RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
        
        //2.调用转发器RequestDispatcher中方法forward实现转发
        dispatcher.forward(request,response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
package com.ccc.demo01Dispatcher;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/servlet2")
public class Servlet2 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet2 我是关羽");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("二哥借你500");
    }

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

转发和重定向区别:

重定向:

  1. 请求了 两次服务器,地址栏有变化。由刚开始的servlet1——>变为了sevlet2
  2. 重定向可以 定向到外网
  3. 重定向的地址(若不是外网)必须得写上 项目的名称。/day12_web/servlet2
  4. 重定向最终的结果:影响的是servlet2中的数据

转发:

  1. 请求了 一次服务器,地址栏没有任何变化。servlet1——>还是sevlet1
  2. 转发 不能到外网。转发只是服务器内部的行为,客户端并不知道这个行为
  3. 转发的路径 不需要写项目的名称。/servlet2。因为是在当前项目的内部,所以可以省略项目的名称
  4. 转发的最终结果,影响的也是servlet2中的数据

什么时候用转发,什么时候用重定向

  1. 需要外网的时候,只能用重定向
  2. 一般想要让浏览器的地址栏有变化,那么使用重定向(假如京东网页,登录成功,跳转到首页,这时候地址也应该变成首页的地址)
  3. 一般不想让地址发生变化,使用转发(假如京东网页,登录失败,还在登录页面让用户继续登录),一次请求request对象是有效的
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/92650152
今日推荐