请求转发与重定向的区别,并介绍请求转发与重定向

    科技2025-04-25  8

    请求转发与重定向的区别,并介绍请求转发与重定向

    请求转发与重定向的区别请求转发重定向

    请求转发与重定向的区别

    一.请求转发与重定向的区别 1)

    重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

    由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

    而请求转发方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

    由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

    2)重定向 两次请求,两次响应 重定向不携带数据 重定向地址栏发生改变 3)转发 一次请求,一次响应 转发需要携带数据 转发地址栏不会发生变化 4) 使用 如果要保留请求域中的数据,使用转发,否则使用重定向。 以后访问数据库,增删改使用重定向,查询使用转发。 5)小结 1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect(); 2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变; 3、转发是服务器行为,重定向是客户端行为; 4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求; 5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。

    请求转发

    二.请求转发 1)什么是请求转发 浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由Servlet2再处理之后返回给浏览器 2 )代码实现

    request.getRequestDispatcher("/demo07").forward(request, response);

    3)特点 1.地址栏不发生变化,显示的是上一个页面的地址 2.请求次数:只有1次请求 3.请求域中数据不会丢失

    4).例子 Servlet01

    @WebServlet("/demo01") public class Demo06Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将"游戏本"添加到请求中,携带到下一个servlet //1 存数据 request.setAttribute("name","电脑"); //2 携带到下一个servlet,只能使用转发 request.getRequestDispatcher("/demo07").forward(request, response); } } (这就是第一个Servlet01,通过请求转发发给下一个Servlet02)

    Serlvet02

    @WebServlet("/demo02") public class Demo07Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 取数据 String name = (String) request.getAttribute("name"); //2 组装标签后,响应给浏览器 response.setContentType("text/html;charset=utf-8"); response.getWriter().println("<font color='red'>"+name+"</font>"); } }

    重定向

    三.重定向 1)什么是请求转发 浏览器访问Servlet1,Servlet1不知道结果,但是Servlet1知道Servlet2知道结果,将Servlet2的地址返回给浏览器,浏览器根据Servlet1给的地址访问Servlet2,Servlet2将参数处理得到结果返回给浏览器

    2 )代码实现

    response.sendRedirect(request.getContextPath()+"要跳转的页面")

    3 )特点 两次请求,两次响应 重定向不携带数据 重定向地址栏发生改变

    4)例子 Servlet01

    @WebServlet("/demo01") public class Demo06Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 存数据 request.setAttribute("name","电脑"); response.sendRedirect(request.getContextPath()+"demo02") } }

    Servlet02

    @WebServlet("/demo02") public class Demo07Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println(request.getAttribute("name")); } }
    Processed: 0.008, SQL: 8