前言
之前将传统的SpringMVC工程改成了Spring Boot并支持JSP,但不是jar包运行的方式,这次继续改造成Jar包方式支持JSP。
开始创建
pom.xml
<packaging>jar</packaging>
<!-- 增加jsp支持,否则会变成直接下载页面 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
application.properties
server.servlet.context-path=/familydoctor-webapp
server.port=8081
logging.level.root=INFO
# 屏蔽o.a.tomcat.util.scan.StandardJarScanner : Failed to scan错误
logging.level.org.apache.tomcat.util.scan.StandardJarScanner=ERROR
# 相对路径,默认输出的日志文件名为spring.log
logging.path=log
spring.profiles.active=prod
FamilyDoctorApplication
package com.asiainfo.aigov;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class FamilyDoctorApplication {
public static void main(String[] args) {
SpringApplication.run(FamilyDoctorApplication.class, args);
}
}
页面存放目录结构
resources下面的META-INF/resources里的文件默认可以直接读取,无需额外配置ResourceHandler
结后语
打包后执行会报以下的错误:
java.io.FileNotFoundException: file:/Users/pany/Documents/workspace/aigov/familydoctor-webapp/target/familydoctor-webapp.jar!/BOOT-INF/classes!/app.properties (No such file or directory)
这是因为使用下面的写法在IDE里是可以的,但打成JAR包后不行。
String path = this.getClass().getClassLoader().getResource(fileName).getFile();
要改成
Reader reader = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(fileName), "UTF-8");
properties.load(reader);
另外,用默认版本的spring-boot-maven-plugin打出来的Jar包访问JSP会报404错误,用1.4.2.RELEASE
版本就没问题。