redirect 和forward的区别

mac2025-03-31  1

一:间接请求转发(Redirect)

注:http 400是提交信息的格式不对

 间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向

//Servlet中处理get请求的方法 public void doGet(HttpServletRequest request,HttpServletResponse response){ //请求重定向到另外的资源 response.sendRedirect("资源的URL"); } //可以将addemp的请求返回到emp/list页面 @GetMapping("/emps") public String list(Model model) { Collection<Employee> employees = employeeDao.getAll(); //放在请求域中共享 model.addAttribute("emps", employees); return "emp/list"; } @PostMapping("addemp") public String addemp(Employee employee) { //添加完成之后直接回到list页面 // redirect表示重定向到一个地址(请求) /代表当前项目路径 // forward 表示转发到一个地址 return "redirect :/emps"; }

 

浏览器向Servlet1发出访问请求;Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;浏览器向servlet2发出请求;最终由Servlet2做出响应。 

二:直接请求转发(Forward)

一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式

...... //Servlet里处理get请求的方法 public void doGet(HttpServletRequest request , HttpServletResponse response){ //获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置 RequestDispatcher requestDispatcher =request.getRequestDispatcher("资源的URL"); //调用forward()方法,转发请求 requestDispatcher.forward(request,response); } ......

 

浏览器向Servlet1发出访问请求;Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;最终由Servlet2做出响应。

直接转发和间接转发的原理及区别是什么?

答:Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

  对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

  对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。

 

注意post请求要想返回到另一个get请求的servlet要通过间接转发请求!!!

 

最新回复(0)