写在前面
不是说不推荐jsp吗???
静态资源
好像懂了什么叫静态资源了,似乎可以看成前段依赖的jar包?
maven之scope
依赖范围:
compile:编译依赖范围,默认。对编译、测试、运行三种classpath都有效。比如spring-code依赖。
test:测试依赖范围。只对测试classpath有效。比如Junit,编译测试代码和运行测试时才有效。
provided:已提供依赖范围。对编译和测试classpath有效,运行时无效。比如servlet-api,编译和测试项目的时候需要,但运行时有容器提供,就不用maven重复引入了。
application.properties
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
控制类同Thymeleaf
jar包和war包
jar包不会把webapp里的文件包括进去,就没有jsp文件,运行报错404;
war包就有,运行正常。
配置servlet容器和Tomcat
关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties 配置类中做了定义,我们只需在application.properties配置属性做配置即可。
#配置程序端口,默认为8080
server.port= 8080
#用户绘画session过期时间,以秒为单位
server.session.timeout=
# 配置默认访问路径,默认为/
server.context-path=
# 配置Tomcat编码,默认为UTF-8
server.tomcat.uri-encoding=UTF-8
# 配置最大线程数
server.tomcat.max-threads=1000
最后
jar包不好webapp目录我知道了,什么外部的tomcat服务器部署war包,外部内嵌的tomcat我也大概明白是个啥了,多的看博主的大概也明白了,反正我是记不住了,遇到再查吧。。。
还是写一下吧:
首先外部部署,需要入口类Application extends SpringBootServletInitializer,并实现configure方法。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
然后pom.xml中移除内嵌的tomcat依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
并且,jasper的scope设置为provided
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
说白了,编译的时候SpringBootServletInitializer需要这个包里的javax.servlet,运行时又不能让war包里存在servlet.api这个jar包,否则会和外部的tomcat冲突。所以,如果不是war运行或者jar运行,或者只是点击类运行,或者Application run,不要provide的也是可以的,难怪有些文章说没有加scope也跑通了,如果严谨地讲是要有的。
或者方法二:
只需要这样:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
原博主没有解释了,我也大概猜到原因了,我也懒得写了。
maven修改打包名称:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>springBootJsp</finalName> //只要加这句话即可。
</build>
通过pom.xml配置,可以把WEB-INF目录复制到META-INF/resources下面。这样war包就也可以访问jsp了,然后war也可以通过java -jar命令来启动。
但是有什么意义,我都不用jsp,博主尝试也失败了,我也懒得浪费时间去调了,反正我知道这样做是可以的就行了,如果需要了再弄吧。