Có nhiều màn hình và máy chủ cùng nhau tạo thành một ứng dụng web dựa trên Java. Một JSP chuyển điều khiển từ một servlet này sang một servlet khác hoặc JSP bằng hai phương thức - Chuyển tiếp và Chuyển hướng. Phương thức Chuyển tiếp chuyển tiếp một yêu cầu từ một servlet sang một tài nguyên khác trong một ứng dụng web và tài nguyên này có thể là một servlet khác, trang JSP hoặc tệp HTML.
Mặt khác, phương thức Redirect chuyển hướng yêu cầu đến một ứng dụng khác. Bạn không thể làm điều này với một phương pháp chuyển tiếp. Nếu một chuyển hướng đánh vào một tài nguyên khác trong cùng một ứng dụng, thì đó là sử dụng URL khác với URL yêu cầu ban đầu. Nếu bạn không muốn trả lời yêu cầu, bạn có thể chuyển hướng yêu cầu đến một URL khác và trình duyệt sẽ gửi yêu cầu mới tới URL do bạn cung cấp. Bài đăng này nhấn mạnh một vài sự khác biệt giải thích chi tiết hai phương pháp.
Trong các hệ thống hoặc ứng dụng dựa trên web, thường cần phải chuyển điều khiển giữa các tài nguyên hoặc các tệp JSP khác nhau. Ví dụ: nếu bạn muốn đặt hàng từ một trang web thương mại điện tử, bạn cần đăng ký trước khi tiếp tục. Nếu bạn chưa đăng ký với hệ thống của họ, giỏ hàng có thể cần chuyển quyền kiểm soát sang biểu mẫu JSP chịu trách nhiệm cho quá trình đăng ký. Các hành động phía trước được sử dụng đặc biệt cho mục đích này. Nó được sử dụng để chuyển tiếp yêu cầu từ một tệp JSP này sang tài nguyên khác hoặc tài nguyên khác trong cùng bối cảnh.
Phương pháp này cũng được sử dụng để chuyển tiếp các yêu cầu HTTP nhưng không giống như chuyển tiếp, đó là một quá trình gồm hai bước trong đó chuyển hướng xảy ra ở phía máy khách sang một ứng dụng khác hoàn toàn. Phương thức chuyển hướng chuyển hướng người dùng đến một URL mới. Trình duyệt của khách hàng tự động thực hiện yêu cầu mới trên URL được chỉ định trong tiêu đề chuyển hướng đến từ máy chủ. Nó đòi hỏi giao tiếp khứ hồi với khách hàng, do đó, nó tương đối chậm hơn so với chuyển tiếp.
Phương thức Forward () được sử dụng để chuyển tiếp yêu cầu từ một tệp này sang một tệp khác hoặc từ một tệp tin này đến một bản dịch vụ hoặc từ một bản sao này đến một tài nguyên khác trong một ứng dụng web. Kiểm soát được thông qua bên trong bởi container và trình duyệt / máy khách không tham gia vào quá trình. Phương thức chuyển tiếp được khai báo trong RequestDispatcher. Phương thức SendRedirect () được khai báo trong HttPServletResponse và được sử dụng để chuyển hướng yêu cầu của khách hàng đến một URL khác có sẵn trên một máy chủ hoặc ngữ cảnh khác. Với một chuyển hướng, bạn có thể chuyển hướng trình duyệt đến một ứng dụng khác hoàn toàn.
Một trong những khác biệt chính giữa hai phương pháp là bộ chứa web xử lý tất cả các quy trình bên trong trong trường hợp chuyển tiếp () và URL không thay đổi trong trình duyệt của máy khách, vì vậy máy khách / trình duyệt không liên quan khiến chúng hoàn toàn không biết rằng hành động đã diễn ra. Trong trường hợp SendRedirect (), phương thức đặt các tiêu đề và nội dung chính phù hợp để chuyển hướng yêu cầu đến một URL khác và trình duyệt sẽ gửi yêu cầu mới tới URL hiển thị cho khách hàng khi URL thay đổi trong trình duyệt.
Khi phương thức Forward () được thực thi tại thời điểm yêu cầu, yêu cầu hiện tại sẽ được chuyển tiếp đến một trang JSP khác và quá trình xử lý của JSP hiện tại bị chấm dứt. Yêu cầu có thể được chuyển tiếp đến một servlet được viết bằng ngôn ngữ lập trình Java hoặc đến một trang HTML tĩnh. Yêu cầu SendRedirect () chỉ cần yêu cầu trình duyệt chuyển đến một URL khác, gửi điều khiển thực thi bên ngoài ứng dụng web. Nó sử dụng quy trình hai bước để hướng dẫn URL của trình duyệt thực hiện một yêu cầu khác chuyển điều khiển đến máy khách.
Forward () hoạt động trong máy chủ và thực thi nhanh hơn SendRedirect (). Chuyển hướng phải đi qua trình duyệt và sau đó chờ trình duyệt thực hiện yêu cầu HTTP mới. Chuyển hướng làm cho máy chủ gửi mã trạng thái phản hồi HTTP 302 với tiêu đề vị trí chứa URL mới tới trình duyệt và sau khi trình duyệt nhận được mã trạng thái 302, nó sẽ đưa ra yêu cầu mới tới URL được tìm thấy trong tiêu đề vị trí. Điều này đòi hỏi một giao tiếp khứ hồi với khách hàng, điều này làm cho nó tương đối chậm hơn so với chuyển tiếp ().
Tìm hiểu sự khác biệt giữa các phương thức chuyển tiếp và chuyển hướng là một trong những phần quan trọng nhất đối với các nhà phát triển Java. Mặc dù bộ điều khiển có thể thực hiện phương thức chuyển tiếp hoặc chuyển hướng khi kết thúc xử lý yêu cầu, chúng có bộ sử dụng riêng. Hầu hết thời gian, bạn sẽ sử dụng phương thức Forward () vì nó nhanh hơn một chút so với SendRedirect (), trên thực tế, yêu cầu giao tiếp khứ hồi với khách hàng khiến nó chậm hơn so với chuyển tiếp. Vâng, với một chuyển hướng, bạn có thể hướng trình duyệt đến một ứng dụng khác. Điều này không thể được thực hiện với một chuyển tiếp. Tóm lại, chuyển tiếp hoạt động tốt nhất khi một thành phần phải thực hiện logic nghiệp vụ và chia sẻ kết quả với một thành phần khác, trong khi chuyển hướng hoạt động tốt nhất khi máy khách nên được chuyển hướng từ trang này sang trang khác.