RequestDispatcher là một interface, việc thực hiện xác định một đối tượng có thể gửi yêu cầu tới bất kỳ tài nguyên nào (như HTML, Image, JSP, Servlet) trên server.
Phương thức RequestDispatcher
Interface RequestDispatcher cung cấp hai phương thức quan trọng :
Phương pháp | Sự miêu tả |
---|---|
void forward(ServletRequest request, ServletResponse response) |
Chuyển tiếp yêu cầu từ một servlet sang một tài nguyên khác (servlet, tệp JSP hoặc tệp HTML) trên server |
void include(ServletRequest request, ServletResponse response) |
Bao gồm nội dung của một tài nguyên (servlet, trang JSP, tệp HTML) trong phản hồi. |
Làm thế nào để tạo một đối tượng RequestDispatcher
getRequestDispatcher()
Phương thức của ServletRequest trả về đối tượng của RequestDispatcher .
RequestDispatcher rs = request.getRequestDispatcher("hello.html"); rs.forward(request,response);
OR
RequestDispatcher rs = request.getRequestDispatcher("hello.html"); rs.include(request,response);
Ví dụ sử dụng RequestDispatcher
Trong ví dụ này, tôi sẽ chỉ cho bạn cách RequestDispatcher được sử dụng để forward or include phản hồi của một tài nguyên trong Servlet. Ở đây tôi đang sử dụng index.html để lấy tên người dùng và mật khẩu từ người dùng, Validate Servlet sẽ xác nhận mật khẩu đã nhập bởi người dùng, nếu người dùng đã nhập vào “phutranit0107” làm mật khẩu, thì sẽ được chuyển tiếp tới Welcome Servlet khác mà người dùng sẽ Ở trên trang index.html và một thông báo lỗi sẽ được hiển thị.
Các tập tin cần được tạo ra:
- Index.html sẽ có các trường mẫu để lấy thông tin người dùng.
- Validate.java sẽ xác nhận dữ liệu được nhập bởi người dùng.
- Welcome.java sẽ là trang chào đón.
- Web.xml , descriptor triển khai.
Index.html
<form method="post" action="Validate"> Name:<input type="text" name="user" /><br/> Password:<input type="password" name="pass" ><br/> <input type="submit" value="submit"> </form>
Validate.java
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Validate extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { String name = request.getParameter("user"); String password = request.getParameter("pass"); if(password.equals("phutranit0107")) { RequestDispatcher rd = request.getRequestDispatcher("Welcome"); rd.forward(request, response); } else { out.println("<font color='red'><b>You have entered incorrect password</b></font>"); RequestDispatcher rd = request.getRequestDispatcher("index.html"); rd.include(request, response); } }finally { out.close(); } } }
Welcome.java
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Welcome extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<h2>Welcome user</h2>"); } finally { out.close(); } } }
web.xml
<web-app> <servlet> <servlet-name>Validate</servlet-name> <servlet-class>Validate</servlet-class> </servlet> <servlet> <servlet-name>Welcome</servlet-name> <servlet-class>Welcome</servlet-class> </servlet> <servlet-mapping> <servlet-name>Validate</servlet-name> <url-pattern>/Validate</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Welcome</servlet-name> <url-pattern>/Welcome</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
Đây sẽ là màn hình đầu tiên. Bạn có thể nhập Tên đăng nhập và Mật khẩu của bạn ở đây.
Khi bạn nhấn vào Submit, mật khẩu sẽ được xác nhận, nếu nó không phải là ‘phutranit0107’, thông báo lỗi sẽ được hiển thị.
Nhập bất kỳ Tên đăng nhập, nhưng nhập ‘phutranit0107’ làm mật khẩu.
Mật khẩu sẽ được xác nhận thành công và bạn sẽ được hướng tới Servlet Chào đón.