转发和重定向的区别

发布时间:2022-03-01 12:14:48 作者:yexindonglai@163.com 阅读(862)

   转发

    转发是在服务器进行操作的,在前端客户端页面是看不到什么变化的,

通俗理解: 客户端跟服务端要资源,但是服务端没有这个资源,那么服务器端就会去请求别的接口来获取客户机想要的资源,然后在返回给客户端;

转发内部原理如下:

重定向

    重定向可以理解为重新定向资源,当服务器进行转发时,客户端会进行2次请求,资源地址也会跟着变化,

通俗点理解:客户机想服务器请求资源,但是服务器没有这个资源,这时候服务器会返回一个302的状态给客户端,并给出重定向的地址,放在响应头的Location中,如图:

 重定向底层执行原理如下图:

 通过上面的流程,那我们在代码中手动返回302的状态码,并且在响应头加上 Location 字符,其实也是可以实现重定向功能的;代码如下:

  1. package com;
  2. import javax.jws.WebService;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. // servlet 3.0之后推出的新功能,使用注解配置接口路径,有这个注解,就不需要在web.xml中配置 servlet-name和servlet-class了
  10. @WebServlet("/IndexController")
  11. public class IndexController extends HttpServlet {
  12. @Override
  13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. resp.setStatus(302);
  15. resp.setHeader("Location","/UserCOntroller");
  16. }
  17. }

 

关键字Java