Quan trọng: khuyến khích các bạn nên sử dụng JSP với WAR file, JAR file sẽ gặp nhiều vấn đề, một trong số đó mà mình đã gặp là deploy JAR file sử dụng Docker Container… Bài hướng dẫn dưới đây chỉ dành cho những bạn bắt buộc phải dùng JSP views với JAR file trong Spring Boot.
Các tập tin JSP, thông thường được sử dụng với InternalResourceViewResolver, có một số limitation khi sử dụng trong các ứng dụng Spring Boot. Theo như documentation của Spring Boot https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.developing-web-applications.embedded-container.jsp-limitations thì JSP file sẽ chỉ work với Tomcat và Jetty server và sẽ chỉ work là WAR file thôi, không work với JAR file. Thế nhưng, thực tế thì chúng ta cũng có cách để make it work với JAR file. Trong bài viết này, mình sẽ hướng dẫn các bạn cách cấu hình JSP views trong InternalResourceViewResolver với Spring Boot JAR file các bạn nhé!
Mình sẽ tạo mới một Spring Boot project:
và sử dụng InternalResourceViewResolver cho ví dụ này.
Mình sẽ thêm tomcat-embed-jasper dependency:
1 2 3 4 5 |
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> |
và một controller:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava.springboot.internalresourceviewresolver; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/hello") public String home() { return "home"; } } |
Tập tin view home.jsp với nội dung như sau:
1 |
Hello World! |
sẽ không được tạo trong thư mục /src/main/webapp/WEB-INF/views nữa, Spring Boot khi build sẽ không include thư mục này trong JAR file. Các bạn cần tạo nó trong thư mục src/main/resources/META-INF/resources/WEB-INF/views như sau:
Thư mục src/main/resources/META-INF/resources/ sẽ work giống như thư mục src/main/webapp đó các bạn!
Bây giờ thì mình sẽ khai báo trong application.properties như sau:
1 2 |
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp |
Kết quả khi chạy ứng dụng:
Tuấn
May có bài này của anh ạ