Trong bài viết trước, mình đã hướng dẫn các bạn làm thế nào để sử dụng Apache Tiles trong Spring MVC rồi. Mình muốn viết thêm một bài nữa về cách sử dụng Apache Tiles trong Spring Boot để các bạn có cái nhìn tổng quan về sự khác nhau giữa hai cách sử dụng này. Đó là nội dung của bài viết này nhé các bạn!
Mình sẽ sử dụng Spring Boot Initilizr Web để tạo mới một project Spring Boot với dependency là Web.
và import nó vào trong IntelliJ IDE như sau:
Bây giờ chúng ta hãy thêm dependency của Apache Tiles vào nhé các bạn.
1 2 3 4 5 6 |
<!-- Apache Tiles --> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>3.0.7</version> </dependency> |
OK, giờ chúng ta bắt đầu nào!
- Bước đầu tiên, giống như trong Spring MVC, chúng ta cần các tập tin để hiển thị view được sử dụng bởi Apache Tiles. Mình sẽ lấy lại các tập tin trong bài viết trước nhé các bạn.
Mình sẽ tạo thư mục src/main/webapp/WEB-INF/views và copy tất cả các tập tin hiển thị view trong bài viết trước, bỏ vào thư mục này.
Mình sẽ sửa nội dung tập tin layout.jsp một chút cho phù hợp, cụ thể như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@ page session="false"%> <html> <head> <title>Home</title> </head> <body> <h1>Apache Tiles and Spring Boot Integration!!!</h1> <tiles:insertAttribute name="content" /> <P>Copyright by Huong Dan Java</P> </body> </html> |
Vì chúng ta đang sử dụng JSTL trong tập tin hiển thị view nên chúng ta cần thêm dependency cho thư viện JSTL nhé các bạn:
1 2 3 4 5 |
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> |
- Bước tiếp theo, mình sẽ copy tập tin cấu hình của Apache Tiles trong bài viết trước và bỏ vào thư mục src/main/webapp/WEB-INF.
- Bước nữa là chúng ta sẽ định nghĩa các bean cho Apache Tiles.
Trong bước này, mình sẽ sử dụng annotation @Configuration để định nghĩa các bean cho Apache Tiles.
Bạn nào chưa biết cách định nghĩa bean trong khung chứa của Spring sử dụng annotation @Configuration thì có thể tham khảo bài viết này nhé!
Mình sẽ tạo mới một tập tin TilesConfiguration nằm trong package com.huongdanjava.apachetilesspringboot, có nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com.huongdanjava.apachetilesspringboot; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.view.tiles3.TilesConfigurer; import org.springframework.web.servlet.view.tiles3.TilesView; import org.springframework.web.servlet.view.tiles3.TilesViewResolver; @Configuration public class TilesConfiguration { @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer configurer = new TilesConfigurer(); configurer.setDefinitions(new String[]{"WEB-INF/tiles.xml"}); configurer.setCheckRefresh(true); return configurer; } @Bean public TilesViewResolver tilesViewResolver() { TilesViewResolver resolver = new TilesViewResolver(); resolver.setViewClass(TilesView.class); return resolver; } } |
- Bước cuối cùng, chúng ta cần làm đó là định nghĩa một controller để chạy nhé các bạn.
Mình cũng sẽ copy class controller trong bài viết trước để chạy
OK, vậy là giờ chúng ta có thể chạy ứng dụng rồi.
Một lưu ý là, vì mặc định Spring Boot sẽ sử dụng Tomcat như là một web server để chạy nên chúng ta cần thêm một dependency nữa để hỗ trợ JSP cho Tomcat, đó là:
1 2 3 4 5 |
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> |
Kết quả:
Hung Pham
Không thấy ví dụ này của bạn trong code github
Huynh HD
Thanks a nhiều