SpringBoot整合JSP页面,java -jar方式启动

为什么还选择使用jsp?
这是一篇在idea中整合的,eclipse中没试,但应该差不多。官方不推荐使用jsp作为页面,而是推荐使用模板thymeleaf作为页面展示。但是目前来说,很多项目的页面还是用的jsp.而且很多现成的项目用的jsp页面,扒过来就能用,当然如果时间允许的情况,还是不建议大家使用jsp,而是采用官方推荐的模板。

整合jsp的坑
正常情况下包含jsp的页面是无法用jar的运行的,因为jsp默认是在webapp目录下,可是打包成jar是没有webapp这个目录结构的。
虽然网上有介绍说通过pom.xml配置,把WEB-INF目录复制到META-INF/resources下面。我试了一下还是访问不了,最后放弃了。谁有兴趣可以继续尝试,毕竟war也可以通过java -jar命令来启动。
具体原因说是什么路径的原因,本人也没有去调试,可以参考以下博客:
https://juejin.im/post/5ad21eb5f265da23945feb62
https://segmentfault.com/a/1190000009785247

整合过程
该过程使用的是SpringBoot1.5.6.RELEASE,如果有其他情况,可能是版本不一致。
源码下载:点此下载 支持 mvn clean spring-boot:run;
java -jar XXX.war 和 外部tomcat 三种方式启动,外部tomcat访问时注意带上项目名。

第一步:
在src/main/下创建web资源文件夹webapp,webapp 和 java, resources属于同级目录。

第二步:
在webapp下创建WEB-INF文件夹。并在WEB-INF下创建views文件夹。

第三步:pom 添加依赖
<!--jsp页面使用jstl标签-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
第四步:application.properties添加属性
#配置tomcat
server.port=9090
server.servlet-path=/

#jsp 支持
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/views/

#关闭默认模板引擎
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=false

#配置日志文件
logging.config=classpath:config/logback-spring.xml

#配置jdbc数据源
jdbc.ds.driverClassName=com.mysql.jdbc.Driver
jdbc.ds.url=jdbc:mysql://127.0.0.1:3306/ruubypayoauthcenter?useUnicode=true&characterEncoding=UTF-8
jdbc.ds.username=root
jdbc.ds.password=123456
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
第五步:编写一个Controller用来跳转页面
@Controller
@RequestMapping("/testjsp")
public class TestController {

    @RequestMapping("/index")
    public String testJsp(){
        return "index";
    }
}
1
2
3
4
5
6
7
8
9
第六步:在/WEB-INF/views/下编辑index.jsp
这里为了测试,对静态资源的访问,特意加了一张图片试一下 ,index.jsp内容如下:

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>

<img src="${pageContext.request.contextPath}/images/heihei.png"/>
</body>
</html>