重定向与请求转发的区别

2020-10-20 10:35发布

重定向与请求转发的区别

首先要知道,什么是重写向,什么是请求转发!

重定向

浏览器发起:两次请求,两次响应

浏览器先访问servlet1,没有想要的资源,再返回了302重定向码,和location(另一个servlet地址)

浏览器拿到这两个参数后,再访问servlet2。

且地址栏会变化。

图解:

在这里插入图片描述

代码如下:

package com.lbl.servlet;

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("/SendRedirect01Servlet")
public class SendRedirect01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("/Day04_war_exploded/SendRedirect02Servlet");
    }
}
package com.lbl.servlet;

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("/SendRedirect02Servlet")
public class SendRedirect02Servlet 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("success");
    }
}

效果图:

在这里插入图片描述

请求转发

浏览器发起:一次请求,一次响应

浏览器访问servlet1,然后servlet1请求转发到servlet2,此时requst和response域会传给servlet2,最后由servlet2响应浏览器。

地址栏不变化

图解:

在这里插入图片描述

代码如下:

package com.lbl.servlet;

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("/dispatcher01Servlet")
public class Dispatcher01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //将游戏本添加到requst域中
        request.setAttribute("name","游戏本");
        request.getRequestDispatcher("/dispatcher02Servlet").forward(request,response);
    }
}
package com.lbl.servlet;

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("/dispatcher02Servlet")
public class Dispatcher02Servlet 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>");
    }
}

效果图:

在这里插入图片描述


作者:水巷石子

链接:https://blog.csdn.net/qq_37924905/article/details/108518202

来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。