Trong bài viết này, chúng ta sẽ tìm hiểu về cách chuyển tiếp và chuyển hướng trong Servlet. Chúng ta sẽ hiểu được sự khác biệt giữa chuyển tiếp và chuyển hướng thông qua các ví dụ minh họa.
Forward (Chuyển tiếp)
Chuyển tiếp (Forward): Khi một yêu cầu từ trình duyệt gửi tới một Servlet, nó có thể chuyển tiếp yêu cầu đó tới một trang khác (hoặc một servlet khác). Địa chỉ trên trình duyệt vẫn là đường dẫn của trang đầu tiên, nhưng nội dung của trang được chuyển tiếp tới sẽ được hiển thị. Trang được chuyển tiếp tới phải nằm trong ứng dụng web của bạn. Bằng cách sử dụng chuyển tiếp, bạn có thể truyền dữ liệu từ trang 1 sang trang 2 bằng cách sử dụng request.setAttribute()
.
Hình ảnh minh họa Forward (Chuyển tiếp)
Với ví dụ sau đây:
@WebServlet("/other/forwardDemo")
public class ForwardDemoServlet extends HttpServlet {
// ...
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String forward = request.getParameter("forward");
if ("true".equals(forward)) {
// Chuyển tiếp đến servlet ShowMeServlet
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/showMe");
dispatcher.forward(request, response);
return;
}
// ...
}
// ...
}
Khi chạy đoạn code trên và truy cập vào URL http://localhost:8080/ServletTutorial/other/forwardDemo?forward=true
, trang web sẽ chuyển tiếp (forward) yêu cầu tới servlet ShowMeServlet
. Đường dẫn trên trình duyệt vẫn giữ nguyên, nhưng nội dung của trang là từ servlet ShowMeServlet
.
Redirect (Chuyển hướng)
Chuyển hướng (Redirect): Khi một yêu cầu từ trình duyệt gửi tới một Servlet, servlet này có thể chuyển yêu cầu tới một trang khác và kết thúc nhiệm vụ của nó. Trang được chuyển hướng tới có thể là trang trong ứng dụng web hoặc là một trang bất kỳ. Địa chỉ trên trình duyệt lúc này sẽ hiển thị đường dẫn của trang được chuyển hướng tới. Khác với chuyển tiếp, với chuyển hướng bạn không thể sử dụng request.setAttribute()
để truyền dữ liệu từ trang A sang trang B.
Hình ảnh minh họa Redirect (Chuyển hướng)
Với ví dụ sau đây:
@WebServlet("/other/redirectDemo")
public class RedirectDemoServlet extends HttpServlet {
// ...
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String redirect = request.getParameter("redirect");
if ("true".equals(redirect)) {
// Chuyển hướng tới servlet ShowMeServlet
String contextPath = request.getContextPath();
response.sendRedirect(contextPath + "/showMe");
return;
}
// ...
}
// ...
}
Khi chạy đoạn code trên và truy cập vào URL http://localhost:8080/ServletTutorial/other/redirectDemo?redirect=true
, trang web sẽ chuyển hướng (redirect) yêu cầu tới servlet ShowMeServlet
. Đường dẫn trên trình duyệt sẽ hiển thị đường dẫn của servlet ShowMeServlet
.
Lưu ý rằng:
- Redirect cho phép chuyển hướng tới các trang bao gồm cả các trang nằm ngoài website.
- Forward chỉ cho phép chuyển tiếp tới các trang trong website và có thể chuyển dữ liệu giữa 2 trang bằng cách sử dụng
request.setAttribute()
.
Với kiến thức về chuyển tiếp và chuyển hướng trong Servlet, bạn có thể áp dụng chúng trong những tình huống phù hợp. Hãy tiếp tục đọc bài viết tiếp theo để tìm hiểu thêm.