Thứ Hai, 8 tháng 9, 2014

Use Request Dispatcher

ĐỀ BÀI:

Implement an application as following:
Depends of the question, GateKeeper will forward request to corresponding Answers.

1. Tạo trang HTML:
Chúng ta tạo 1 trang index.HTML đơn giản như sau:

GateKeeper là 1 servlet, có nhiệm vụ nhận thông tin từ trang index.html và chuyển hướng tới các servlets khác tương ứng với câu hỏi từ input có name là question.

2. Tạo Servlet GateKeeper

Tạo 1 List số để so sánh với input của người dùng:

                private List<String> answerCodes = null;
               @Override
                public void init() throws ServletException {
                      answerCodes = new LinkedList<>();
                      answerCodes.add("1");
                      answerCodes.add("2");
                      answerCodes.add("3");
                }

Xử lý hàm processRequest của Servlet này như sau:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GateKeeper</title>");            
            out.println("</head>");
            out.println("<body>");

            String question = request.getParameter("question");
            List<String> collect = answerCodes.stream().filter(s -> question.contains(s)).collect(Collectors.toList());
            
            if(collect!= null){
                RequestDispatcher rd = request.getRequestDispatcher("Answer" +collect.get(0));
                rd.forward(request, response);
            }
            

            out.println("<h1>No corresponding answer " + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

Hàm "filer" ở trên sẽ lọc các phần tử thỏa mãn điều kiện input của người dùng chứa mã câu hỏi nào (answerCode) thì sẽ trả về mã câu hỏi đó. Ví dụ, nếu input của người dùng có giá trị là "a1" thì biến collect sẽ chứa answerCode là 1. Còn nếu giá trị input của người dùng k thỏa mãn điều kiện trên thì sẽ hiện thông báo "No corresponding answer".

Trường hợp collect != null, GateKeeper sẽ chuyển hướng sang những servlet tương ứng.Ví dụ Servlet Answer1 như sau:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Answer1</title>");          
            out.println("</head>");
            out.println("<body>");
                     
            out.println("<h1>Question1" + "</h1>");
            out.println("<h1>Question1 answered"+"</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

Không có nhận xét nào:

Đăng nhận xét