为什么80%的码农都做不了架构师?>>>
jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式
1. 运行SpringBoot项目的几种方式
1.1 使用内嵌Tomcat运行项目
- 在IDE中右键运行启动类,也就是直接直接运行Appliction启动类中的main方法
- 使用
mvn spring-boot:run
- 打成jar包,使用
java -jar xxx.jar
- 打成war包,使用
java -jar xxx.war
1.2 内嵌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
1.3 使用外部Tomcat部署war包
将Spring Boot导出人war包直接放在Tomcat中部署,如果是使用的jsp作为模板引擎,也就是接下来做的。还需要做一些额外配置,具体配置继续看下面的操作。
1.4 总结
总结一下,运行一个Spring Boot项目至少有5种方法,下面就让jsp作为模板引擎的Spring Boot项目在这5种启动方式下正常运行吧。
2. 使用jsp作为模板引擎
项目结构如下:
2.1 引入依赖
pom.xml
org.springframework.boot
spring-boot-starter-web
javax.servlet
jstl
org.apache.tomcat.embed
tomcat-embed-jasper
provided
org.springframework.boot
spring-boot-starter-tomcat
provided
注意: tomcat-embed-jasper这个依赖如果设置依赖范围为provided在第1种第3种方式运行的进修会报错,用默认依赖范围就好,默认为compile,在使用Intellij Idea按照spring boot项目启动时,有如下发现,所以设置成provided就好,官方也推荐使用provided
2.2 设置打包方式
pom.xml
jar
war
不同启动方式下的打包方式
- IDE中执行main方法 都可以
- 执行
mvn spring-boot:run
都可以 - 执行
java -jar xxx.jar
jar包 - 执行
java -jar xxx.war
war包 - 外部容器 war包
2.3 application.properties配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
2.4 编写控制器
编写一个测试用的控制器,其他引用类参考项目代码
@Controller
public class WelcomeController {
@GetMapping("/")
public String index(ModelMap model) {
System.out.println("demo/jsp/index");
DemoUser user = new DemoUser();
user.setName("张三abc");
user.setPassword("password-zhangsan");
user.setBirthday(new Date());
user.setDesc("我的描述");
user.setId(1001L);
model.addAttribute("user", user);
model.addAttribute("currentTime", new Date());
return "welcome";
}
}
2.5 编写jsp页面
略,参考代码 webapps/WEW-INF/jsp/welcome.jsp
2.6 编写启动类
@SpringBootApplication
public class JspApplication extends SpringBootServletInitializer {
// war启动 署到外部容器tomcat需要:
// 1)要实现SpringBootServletInitializer
// 2)覆盖该方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(JspApplication.class);
}
// jar启动
public static void main(String[] args) {
SpringApplication.run(JspApplication.class, args);
}
}
2.7 验证是否起作用
404
正常访问
3. 小结
项目源码 https://gitee.com/yysue/tutorials-java
5种启动方式小结:
- 内嵌容器,intellij idea中执行启动类main方法
- 单模块项目时,可正常访问
- 多模块项目时,404,将jsp文件移到如下目录结构,也可正常访问 这个帖子子就描述了这个问题,给出的方案是部署到外部容器中
- 内嵌容器,java -jar xxx.jar
- 按如下目录配置执行,可正常访问
- 其他情况下执行,404
- 内嵌容器,java -jar xxx.war,可正常访问
- 内嵌容器,mvn spring-boot:run,可正常访问
- 外部容器,war包放到tomcat的webapps目录下,可正常访问
4. 参考
- Spring Boot干货系列:(五)开发Web应用之JSP篇
- spring-boot-sample-web-jsp - 官方demo
- 项目源码 https://gitee.com/yysue/tutorials-java