Servlet之请求转发和响应重定向

多个servlet之间的跳转有两种方式:

  • 请求转发:request.getRequestDispatcher(“转发路径”).forward(request, response);

  • 响应重定向:response.sendRedirect("转发路径 ");

请求转发:

@WebServlet("/direct/login") // @WebServlet注解相当于web.xml文件
public class CheckLoginServlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        if(1 == 1){
    
    
        	// 请求转发
        	request.getRequestDispatcher("/direct/index").forward(request,response);
        }
    }
}
@WebServlet("/direct/index") // @WebServlet注解相当于web.xml文件
public class IndexServlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        response.getWriter().println("<h1>This is index page</h1>");
    }
}

cd4356

请求转发原理:

  1. 请求转发是服务器跳转,浏览器只产生一次请求

  2. 请求转发语句:request.getRequestDispatcher().forward()

cd4356
请求转发执行流程:浏览器发送一个请求到tomcat服务器,tomcat中CheckLoginServlet对请求进行处理,当CheckLoginServlet中调用了request.getRequestDispatcher().forward()方法后,就会将该请求(HttpServletRequest对象)原封不动的发送给IndexServlet,当indexServlet处理完该请求后产生的响应,将响应的结果返回给浏览器。这里我们可以看到浏览器地址栏的URL地址没有发生变化,证明浏览器只产生了一次请求。



响应重定向转发:

@WebServlet("/direct/login") // @WebServlet注解相当于web.xml文件
public class CheckLoginServlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        if(1 == 1){
    
    
            // 响应重定向
            response.sendRedirect("/direct/index");
        }
    }
}
@WebServlet("/direct/index") // @WebServlet注解相当于web.xml文件
public class IndexServlet extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        response.getWriter().println("<h1>This is index page</h1>");
    }
}

cd4356

响应重定向原理:

  1. 响应重定向是浏览器端跳转,会产生两次请求

  2. 响应重定向语句:response.sendRedirect()

cd4356
响应重定向执行流程:浏览器发送一个请求到tomcat服务器,tomcat中CheckLoginServlet对请求进行处理,当CheckLoginServlet中调用了response.sendRedirect()方法后,会马上返回一个响应给浏览器。然后浏览器会重写发送一个请求给IndexServlet,(注意这个请求和浏览器发送的第一个请求没有任何关联),当indexServlet处理完该请求后产生的响应,将响应的结果返回给浏览器。这里我们可以看到浏览器地址栏的URL地址发生了变化,证明浏览器产生了两次请求。

猜你喜欢

转载自blog.csdn.net/weixin_42950079/article/details/106668956