Phân biệt SendRedirect() và Forward() trong JSP Servlet

Phân biệt SendRedirectForward là một trong những câu hỏi phỏng vấn cổ điển trong các cuộc phỏng vấn phát triển java web. Điều này không chỉ áp dụng cho các servlet mà còn cho JSP.Trước khi kiểm tra sự khác biệt về ForwardsendRedirect hãy xem đến ý nghĩa và định nghĩa của nó.

SendRedirect ():

Phương thức này được khai báo trong HttpServletResponse nó là một Interface.

Cách sử dụng : void sendRedirect(String url)

 sendredirect-forward-jsp-servletPhương pháp này được sử dụng để chuyển  hướng yêu cầu của khách hàng cho một số vị trí khác để  sử dụng tiếp các chức năng,chuyển các yêu cầu sử dụng trình duyệt, và yêu cầu này là có thể nhìn thấy trong trình duyệt như một mới yêu cầu.

Forward():

Phương thức này được khai báo trong RequestDispatcher,nó là Interface.
Cách sử dụngforward(ServletRequest request, ServletResponse response)

Phương pháp này được sử dụng chuyển tiếp các yêu cầu đến tài nguyên khác để thực hiện các yêu cầu  tiếp theo trong cùng một máy chủ, tài nguyên khác ở đây có thể là bất kỳ file servlet, trang jsp bất kỳ loại quá trình file.Chúng ta có thể sử dụng 2 cách,và cách nào cũng đều sử dụng được :

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

hoặc :

RequestDispatcher rd = servletContext.getRequestDispatcher("/pathToResource");
  rd.forward(request, response);

Phân biệt giữa SendRedirect and Forward 

Bây giờ chúng ta hãy xem một số sự khác biệt giữa hai phương pháp này của servlet API  trong bảng dưới đây :

Forward() SendRediret()
Khi chúng tôi sử dụng phương pháp chuyển tiếp yêu cầu là chuyển đến tài nguyên khác trong cùng một máy chủ để tiếp tục xử lý. Trong trường hợp yêu cầu là  sendRedirect là chuyển hướng đến tài nguyên khác như tên miền khác hoặc các đường dẫn là các máy chủ khác nhau để xử lý.
Nhìn bề ngoài chúng ta không thể thấy địa chỉ chuyển tiếp như vậy sẽ bảo mật hơn. Trong thanh địa chỉ chúng tôi có thể thấy địa chỉ chuyển hướng mới.
Sử dụng phương pháp chuyển tiếp forward()  thì tốc độ chuyên tiếp đến trang xử lý là nhanh hơn. SendRedirect lnó chuyển hướng  chậm hơn bởi vì một chuyến đi vòng thêm là cần thiết . yêu cầu mới được tạo ra cho nên tốc độ xử lý sẽ chậm hơn so với forward.
 

Khi sử dụng forward thì chúng ta có thể gữi dữ liệu sang một trang được chuyển tiếp đến bằng cách sử dụng request.setAttribute ()

Nhưng khi sử dụng sendRedirect nếu chúng ta muốn gữi dữ liệu đi thì  phải lưu trữ các dữ liệu trong phiên làm việc hoặc đi cùng với URL.

Lúc nào thì sử dụng  SendRedirect and Forward ?

? Trong một ứng dụng java web ,khi chúng ta thực hiện một hành động nào đó mà không muốn gửi dữ liệu đi,hoặc muốn chuyển sang một trang mới mà không có bất kỳ xử lý dữ liệu gì thì chúng ta nên dùng SendRedirect.

? Ví dụ về SendRedirect : khi nhấn nút thực hiện login thì khi xử lý xong,chúng ta sẽ chuyển hướng đến một trang nào mong muốn.

? Trong một ứng dụng java web ,khi chúng ta thực hiện một hành động nào đó mà  muốn gửi dữ liệu đi,hoặc muốn chuyển sang một trang mới xử lý dữ liệu  thì chúng ta nên dùng forward.

? Ví dụ về forward: khi nhấn nút thực hiện login thì nếu người dùng đăng nhập sai,chúng ta gữi thông báo cho người dùng,lúc này các bạn có thể dùng request.setAttribute để gửi dữ liệu đi.

 SendRedirect and Forward  tốt hơn?

Nó phụ thuộc vào ứng dụng và các chức năng mà chúng ta đang xử lý như 2 ví dụ tôi vừa nêu ra ở trên.

x