Spring官方已不推荐使用JSP开发WEB应用了,而是推荐用模板引擎。如:
- Thymeleaf(官方推荐)
- FreeMarker
- Velocity
- Groovy
- Mustache
在集成jsp时,必须要把jar包换成war包,否则运行有问题,并且不能使用内置容器,要使用外部容器。
pom.xml
<!-- 打包 -->
<packaging>war</packaging>
<!-- jsp 配置相关 start -->
<!-- 外置tomcat,要将内置容器调整为provided级别,防止冲突 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- jsp 配置相关 end -->
属性配置
在application.properties中配置和jsp相关的属性。
# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
# 项目访问路径,使用内置容器时不起作用
server.context-path=/jj
# 自定义属性,可以在Controller中读取
application.message: Hello Phil
外置war包的处理类
处理外置型war包的上下文注册信息,与启动类建立连接。重载configure方法,传入启动程序类。
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
// 启动程序
return application.sources(BiopApplication.class);
}
}
controller处理类
一般情况下使用@controller注解。
@Controller
public class HelloController {
@Value("${def.hello: hello anmy!~}")
private String hello;
@GetMapping("/hello")
public String sayHello(Map<String, Object> map) {
System.out.println("----controller.sayHello: " + hello);
map.put("hello", hello);
return "hello";
}
}
jsp页面
Springboot默认的位置在src/main/webapp/WEB-INF/jsp/下。可根据需要指定其它目录。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
hello,hello
<br />
message is : ${message}
</body>
</html>
主体就是这些设置,其它可以根据需要添加。
如果用内置容器,直接启动类启动即可;如果有外置容器,先打包再部署启动。