重定向与请求转发
Servlet将浏览器请求的数据处理完成后,要向客户端返回相应的结果。响应结果可以直接输出到页面上,也可以是一个新的URL,这个URL是一个新的HTTP请求,在Servlet中通过两种主要方式来实现对新的URL的转向,分别是重定向与请求转发。
重定向
重定向是指由原请求地址重新定位到某个新地址,原有的地址失效,客户端得到新地址的响应结果,浏览器地址栏显示新的请求地址。两次过程的请求对象不一样。整体过程发生两次请求,两次响应。其中第二次由客户端自动发起。
重定向通过HttpServletResponse对象的sendRedirect方法实现,该方法会通知客户端重新访问新的指定的URL地址。
public class RedirectServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println(request);
// 重定向简写方式,页面地址发生改变
response.sendRedirect("/Form.html");
System.out.println(request);
}
}
请求转发
请求转发是指将请求转发到其它地址,转发过程中始终是一个请求对象,转发后浏览器地址栏内容不变。转发的过程发生在服务器内部。
请求转发使用RequestDispatcher接口的forward 方法来实现,可以将请求转发给另外一个资源,并让该资源对此次请求进行相应。
public class ServletDispatcher extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/Form.html").forward(request,response);
}
}