请求转发
请求转发是通过HttpServletRequest对象实现的 请求转发是服务器内部行为,对客户端是屏蔽的 客户端只产生了一次请求,服务端只产生了一对request和response对象 客户端的地址栏是不变的 请求的参数是可以继续传递的 目标资源可以是Servlet、静态资源,也可以是WEB-INF下的受保护的资源;不可以是外部资源
java">@WebServlet ( "/servlet 1" )
public class ServletTest1 extends HttpServlet { public void service ( HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException { RequestDispatcher requestDispatcher = req. getRequestDispatcher ( "servlet 2" ) ; requestDispatcher. forward ( req, resp) ; }
} @WebServlet ( "/servlet 2" )
public class ServletTest2 extends HttpServletRequest { public void service ( HttpServletRequest req, HttpServletResponse resp) { System . out. println ( "servlet 2执行了" ) ; }
}
响应重定向(推荐)
响应重定向是通过HttpServletReaponse对象实现的 响应重定向是在服务端通过302响应码和location路径,告诉客户端自己重定向到目标资源,是在服务端提示下的,客户端的行为 客户端的地址栏是变化的,客户端至少发送了两次请求 请求产生了多次,后端就会有多个request和response对象,所以请求中的参数不能自动传递 目标资源可以是Servlet、静态资源、外部资源;不可以是WEB-INF下的受保护资源
java">@WebServlet ( "/servlet 1" )
public class ServletTest1 extends HttpServlet { public void service ( HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException { resp. sendRedirect ( "bbb" ) ; resp. sendRedirect ( "aaa.html" ) ; resp. sendRedirect ( "https://www.baidu.com" ) ; }
} @WebServlet ( "/servlet 2" )
public class ServletTest2 extends HttpServlet { public void service ( HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException { System . out. println ( "servlet 2执行了" ) ; }
}