Thứ Sáu, 13 tháng 6, 2014

Use request Dispatcher

Đầu tiên chúng ta cần tìm hiểu về include() method và forward() method :

*include() method : có thể hiểu method này cho phép bao gồm nội dung của tài nguyên (servlet , JSP, file HTML) vào trong response và gửi lên máy chủ xử lý


*foward() method : Cho phép chuyển tiếp một request từ một servlet tới các tài nguyên khác(servlet, file JSP, file HTML) trong cùng server . phương pháp này cho phép 1 servlet xử lý qua một request rồi gửi phản hồi qua một Servlet khác rồi tại đây thì phản hồi mới được gửi về cho khách hàng



Ở bài lần này tôi sẽ  làm một ứng dụng nhỏ với request Dispatcher.

Công việc cụ thể của chúng ta như sau : sẽ làm một ứng dụng trả lời câu hỏi dựa trên các câu hỏi đã có sẵn . Có thể được hiểu như sơ đồ này

Các bước làm của chúng ta như sau :

Bước 1: Chúng ta tạo một web application theo hướng dẫn ở đây

Bước 2 : Chúng ta tạo 3 Servlet và 1 file Jsp , ở đây tôi đặt tên là bannerServlet , ResponseServlet và GateKeeper theo hướng dẫn ở đây . Nhưng hãy nhớ là các bạn chỉ cần đặt tên và Finish.


Cách tạo file JSP


Bước 3 : Bây giờ tôi sẽ nói cụ thể về công dụng của từng cái :

*Đầu tiên là file index.htm , đây là nơi sẽ gửi đi yêu cầu của người dùng. Cụ thể ở đây nó sẽ tạo ra 1 form trong đó  tôi có các câu hỏi có sẵn và người dùng sẽ chọn câu hỏi mà họ muốn có câu trả lời :
1.Đây là code trong index

2.Đây là kết quả của những dòng code ở trên
Hãy chú ý ở hình 1, mọi yêu cầu sẽ được gửi tới GateKeepper

*Servlet GateKeeper ở đây có nhiệm vụ kiểm tra xem số câu hỏi mà người dùng nhập vào có chính xác hay không ,nếu chính xác sẽ gửi tiếp tới ResponseServlet còn không sẽ gửi về None.jsp cụ thể bằng code sau :

Ở đây tôi fix cứng một số mã câu hỏi bằng cách tạo một List<> như trên.

String question2 = request.getParameter("choice");
            if (question.contains(question2)) {
                RequestDispatcher rd = request.getRequestDispatcher("ResponseServlet");
                rd.forward(request, response);
            }

đoạn code trên có nghĩa là tôi sẽ lấy ra sự lựa chọn của người dùng nếu nó tồn tại trong List question thì sẽ được chuyển sang ResponseServlet :

else{
                RequestDispatcher rd = request.getRequestDispatcher("None.jsp");
                rd.forward(request, response);
            }
nếu không sẽ được chuyển về None.jsp

*None.jsp ở đây chỉ có tác dụng show lên 1 thông báo rằng sự lựa chọn đó của bạn không phù hợp và yêu cầu bạn chọn lại mã câu hỏi :
Đơn giản đoạn code của tôi ở đây chỉ như sau :
<h1>Wrong choose , please comeback and choose again</h1>

*ResponseServlet có tác dụng xử lí yêu cầu và trả về kết quả , cụ thể code như sau

Đoạn code trên để lấy ra mã câu hỏi của người dùng và với mỗi mã câu hỏi sẽ là một câu trả lời tương ứng.
Ở đây , nếu bạn muốn trang hiển thị có 1 dòng banner bạn thêm vào đoạn code

RequestDispatcher rd = request.getRequestDispatcher("bannerServlet");
            rd.include(request, response);
* Cuối cùng ở đây , trong bannerServlet sẽ chỉ chứa các code HTML các bạn có thể tự chỉnh theo í thích mình , ở đây tôi ví dụ 1 đoạn như sau

Và cuối cùng kết quả chúng ta sẽ có như sau :
Các bạn có thể down về source code để tham khảo tại link này.

Cảm nhận của riêng tôi về cách làm này thì code ở đây khá rành mạch, dễ hiểu , bằng cách sử dụng foward thì chúng ta có thể gửi request từ servlet(A) sang servlet(B) . Sử dụng include để thêm nội dung của một servlet(A) sang servlet(B) mà không làm thay đổi nội dung phản hồi chính của servlet(B).Quá trình forward cũng cho ta thấy dữ liệu gửi đi được xử lý chính xác và nhanh chóng hơn.

2 nhận xét: