Sử dụng Thymeleaf trong Jakarta EE Servlet

Trong bài viết này, mình hướng dẫn các bạn cách integrate Thymeleaf với Jakarta EE Servlet để thay thế việc sử dụng JSP trong các ứng dụng Jakarta EE Servlet các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Jakarta EE Servlet Maven project để làm ví dụ:

Thymeleaf dependency như sau:

Mình sẽ tạo mới một Servlet để handle request từ người dùng trước:

Trong phương thức doGet() của IndexServlet trên, chúng ta sẽ sử dụng đối tượng TemplateEngine của Thymeleaf để handle response của request.

Để làm được điều này, đầu tiên, chúng ta cần có đối tượng TemplateEngine trước. Mà để có đối tượng TemplateEngine, chúng ta cần có đối tượng của interface ITemplateResolver cấu hình location của các tập tin template.

Có rất nhiều implementation của interface ITemplateResolver giúp chúng ta có thể cấu hình location đến các tập tin template theo nhiều cách khác nhau:

Mình sẽ sử dụng WebApplicationTemplateResolver cho ví dụ của bài viết này:

Giờ thì các bạn có thể khởi tạo đối tượng TemplateEngine rồi:

Các bạn cần phải đăng ký đối tượng TemplateEngine của Thymeleaf với ServletContext ngay khi ứng dụng chạy lên trước. Chúng ta sẽ sử dụng ServletContextListener để làm điều này như sau:

Như các bạn thấy, chúng ta sẽ lưu đối tượng TemplateEngine này vào ServletContext để mỗi khi có request tới ứng dụng, chúng ta sẽ lấy nó ra và handle response cho request đó.

Giờ mình sẽ modify servlet ở trên để lấy và sử dụng TemplateEngine, như sau:

Phương thức process() của đối tượng TemplateEngine sẽ handle response cho ứng dụng. Tham số của phương thức này bao gồm template name, đối tượng WebContext được build từ request và response của servlet hiện tại, đối tượng Writer từ response của servlet hiện tại để write response tới người dùng.

Nội dung của tập tin home.html trong thư mục src/main/webapp/WEB-INF/templates như sau:

Xoá tập tin web.xml trong thư mục src/main/webapp/WEB-INF/ (vì chúng ta đang sử dụng annotation @WebServlet) và tập tin index.jsp trong thư mục src/main/webapp/, sau đó chạy ứng dụng, các bạn sẽ thấy kết quả như sau:

Add Comment