Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
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:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>
và một controller:
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:
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:
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
Kết quả khi chạy ứng dụng: