重定向和请求转发

重定向和请求转发

  1. 这个两个都是服务器对请求的处理,但是这两种处理方式不同。
  2. 先说大概的区别,
    • 重定向是两次请求两次响应,可以定向到外部资源或者内部资源,地址栏发生改变。
    • 请求转发是一此请求,一次响应。只能转发到内部资源,地址栏不发生改变。
  3. 还是有点懵?所以深入查询一下吧

重定向

  1. 重定向是某次请求,服务器接收到了这次请求,但是自己又没有这个资源,所以要告诉客户端,去请求其他资源。但是不能只告诉自己没有,还要告诉客户端哪里有资源。这个资源包括自己服务器内部的资源和其他服务器的资源。

  2. response.sendRedirect("https:www.baidu.com");
    重定向语句就是这样,响应对象给客户端使用sendRedirect()方法响应一个新的地址。
    在这个方法中就内含了响应状态码302,这个状态码就是重定向的意思,
    
  3. 当客户端读到这个响应之后,就会自动跳转到响应的连接地址。

图示

重定向和请求转发_第1张图片

请求转发

  1. 这个是浏览器请求资源,服务器在第一个servlet中没有找到可用的资源,那就继续在自己的服务器中的其他servlet中寻找,这样的请求,响应方式就是请求转发。
  2. 来看看图吧

重定向和请求转发_第2张图片

  1. 其实他的步骤很简单:请求对象得到转发器,转发对象

代码实现

/*Author:LH
CreatTime:2020.08.19.15:59*/

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(name = "Servlet1",value = "/demo1")
public class Servlet1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("请求来了");
        request.setAttribute("username","zhangsan");
        request.getRequestDispatcher("/demo2").forward(request,response);
        Object password = request.getAttribute("password");
        System.out.println(password);

    }
}
/*Author:LH
CreatTime:2020.08.19.15:59*/

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(name = "Servlet2",value = "/demo2")
public class Servlet2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo2请求来了");
        Object username = request.getAttribute("username");
        System.out.println(username);
        request.setAttribute("password","12345");
    }
}

小结:

区别 转发forward() 重定向sendRedirect()
根目录 包含项目访问地址 没有项目访问地址
地址栏 不会发生变化 会发生变化
哪里跳转 服务器端进行的跳转 浏览器端进行的跳转
请求域中数据 不会丢失 会丢失

参考链接:https://blog.csdn.net/weixin_40001125/article/details/88663468?ops_request_misc=%7B%22request%5Fid%22%3A%22159782329619724811845962%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=159782329619724811845962&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-2-88663468.pc_ecpm_v3_pc_rank_v3&utm_term=重定向&spm=1018.2118.3001.4187

你可能感兴趣的:(Java,web,servlet)