Một
RequestDispatcher
là một class vô cùng quan trọng trong
Java. Nó giúp cho trang web chuyển request từ servlet này sang một servlet khác
bằng cách cho phép gọi một servlet khác từ trong một servlet khác. Nó tạo ra
một đối tượng nhận request từ client và gửi chúng đến bất kỳ resource nào như
một servlet, HTML hay JSP file.
Để có được đối tượng
RequestDispatcher
ta sử dụng method getRequestDispather()
từ đối tượng HttpServletRequest.
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("index.jsp");
}
Đoạn code trên cho ta một
RequestDispatcher.
Với request là một đối tượng của
ServletRequest và index.jsp là tên của resource.Phương thức getRequestDispatcher() có tham số là chuỗi đường
dẫn đến resource mà request được chuyển đến.
Để gọi RequestDispatcher
Ta sử dụng phương thức include() hoặc forward()
requestDispatcher.forward(request, response);
requestDispatcher.include(request, response);
Khi
gọi include() hoặc forward(), servlet container sẽ kích hoạt bất cứ resource nào
(servlet, html file hoặc jsp file) mà mapping với url của
RequestDispatcher
. Giả sử resource là một
servlet khác, thì servlet được gọi tới có thể truy xuất request như servlet gọi
nó, và sẽ tạo response như servlet hiện tại. Có sự khác nhau giữa include() và
forward()
Forward()
method:
Chuyển
một request từ một servlet tới resource khác trên server và chuyển hoàn toàn
quyền cho servlet được chuyển tới. Trước khi forward, nó không xử lý gì về nội
dung và đến servlet cuối cùng mới thực hiện điều đó (print ra màn hình)
Include()
method
Để
nhận kết quả trả về từ trang đích và tiếp tục xử lý. Kết quả của servlet được
gọi sẽ được ghép với servlet được kích hoạt
Giả sử ta có một request gửi đến servlet có tên là GateKeeper. GateKeeper sẽ làm nhiệm vụ chuyển request đến các servlet tương ứng.
<body> <div>Chose your anwser</div> <form action="GateKeeper"> <select name="answer"> <option value="1">Answer 1</option> <option value="2">Answer 2</option> <option value="3">Answer 3</option> <option value="4">Answer 4</option> </select> <input type="submit" value="Submit" /> </form> </body>
Tạo
một servlet có tên Gatekeeper để chuyển request đến các servlet khác. Gatekeeper sẽ chuyển request đến servlet tương ứng được map trong parameter của getRequestDispatcher()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String answer = request.getParameter("answer");
RequestDispatcher requestDispatcher = request.getRequestDispatcher("Answer" + answer);
requestDispatcher.forward(request, response);
}
Ta
tạo thêm 4 servlet: Answer1, Answer2, Answer3, Answer4 với kết quả hiển thị
tương ứng.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("This is Answer 2");
}
Chạy file index.jsp ta được giao diện như hình dưới.
Khi chọn Answer 2 và nhấn Submit, request sẽ gửi tới servlet Gatekeeper, tại đây Gatekeeper sẽ xử lý và nhận vào parameter là Answer 2 và nó sẽ chuyển request này đến servlet Answer2, cuối cùng in ra kết quả như hình dưới.
hay lắm
Trả lờiXóaRất hay
Trả lờiXóaRất hay. Cảm ơn bạn!
Trả lờiXóa