📜  Servlet – forward() 和 sendRedirect() 方法示例(1)

📅  最后修改于: 2023-12-03 15:34:56.737000             🧑  作者: Mango

Servlet – forward() 和 sendRedirect() 方法示例

在 Java Servlet 开发中,我们经常使用两种方法将请求转发或重定向到另一个资源或页面。这两种方法分别是 forward() 和 sendRedirect() 方法。

forward() 方法

forward() 方法用于将请求转发到另一个 Servlet、JSP 或 HTML 页面。该方法是在当前请求的上下文内完成的,因此在转发过程中,request 对象和 response 对象是同一个。

RequestDispatcher rd = request.getRequestDispatcher("target.jsp");
rd.forward(request, response);

在上述方法调用中,RequestDispatcher 对象用于获取目标页面的请求调度程序。然后调用 forward() 方法将当前请求和响应对象转发到目标页面。

需要注意的是,使用 forward() 方法时,需要确保目标页面的路径与当前 Servlet 的路径相对应。

sendRedirect() 方法

sendRedirect() 方法用于将请求重定向到另一个 Servlet、JSP 或 HTML 页面。与 forward() 方法不同,sendRedirect() 方法会创建一个新的请求对象,因此 requestresponse 对象是不同的。为了保证能够在重定向后继续使用 session 信息,需要在重定向前先将 session 信息存在 URL 参数中。

response.sendRedirect("target.jsp");

在上述方法调用中,response 对象的 sendRedirect() 方法用于重定向到目标页面。

需要注意的是,使用 sendRedirect() 方法时,需要确保目标页面的路径与当前 Servlet 的路径相对应。

对比

forward() 和 sendRedirect() 方法的主要区别是:

  • forward() 方法是在当前请求的上下文内完成的,因此 requestresponse 对象是同一个。而 sendRedirect() 方法则创建了一个新的请求对象,因此 requestresponse 对象是不同的。
  • 对于 sendRedirect() 方法重定向后的请求,源 Servlet 完成处理后会立即返回响应,而不会等待目标页面的处理结果。而 forward() 方法则会将请求转发到目标页面,等待相应处理完成后返回响应。
总结

在 Java Servlet 开发中,使用 forward() 和 sendRedirect() 方法来实现请求的转发和重定向,是必不可少的。对于需要获取目标页面处理后的结果,或需要在处理后继续访问 session 信息的场景,需要使用 forward() 方法。而对于不需要获取目标页面处理结果,或需要与用户进行新一轮交互的场景,则需要使用 sendRedirect() 方法。