本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/39,欢迎留言。
前言
SpringBoot除了可以开发后台服务(Service),Web页面端也是可以的。在之前接触的项目中,主要使用JSP来开发Java Web应用,不过在SpringBoot中,默认推荐是使用 Thymeleaf 模版引擎。
本文主要是小结下SpringBoot的Web开发,初步搭建其开发环境(JSP & Thymeleaf),也对原理进行一些小结。
一、SpringBoot静态资源目录
SpringBoot使用标准的Maven目录结构:
![](https://img.haomeiwen.com/i595838/60446c37f1f828f5.png)
在编译打包成Jar包之后,Jar包内的目录结构是:
![](https://img.haomeiwen.com/i595838/afc76f62d24e5244.png)
编译后,源码工程与编译后的目录对照如下:
/src/main/java ----------BOOT-INF/classes/具体包名下
/src/main/resource -----BOOT-INF/classes/根目录下
pom.xml中的依赖包-----BOOT-INF/lib/
pom.xml----------------META-INF/maven/
SpringBoot工程启动依赖----------org/
SpringBoot默认的静态资源路径:
当我们在浏览器访问SpringBoot项目: http://127.0.0.1:8080/
的时候,SpringBoot默认从下面的文件夹中加载静态资源:
- /BOOT-INF/classes/static/
- /BOOT-INF/classes/public/
- /BOOT-INF/classes/resources/
- /META-INF/resources/
二、SpringBoot支持的模板引擎
SpringBoot除了支持JSP外,还支持比较多的模版引擎:
- Thymeleaf
- FreeMarker
- Groovy
- Velocity
三、SpringBoot整合JSP
SpringBoot整合JSP,最终打包的时候,可以选择以 Jar包/War包的形式输出。
对于以war包输出,在外部tomcat运行,可以参考文尾的参考链接,官方的示例代码。
这里以jar包形式,便于独立运行,目录结构如下:
![](https://img.haomeiwen.com/i595838/7c9dd17731a29e88.png)
需要有下面几项配置:
1、配置POM文件
引入依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- JSP 依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<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>
配置编译参数
上面提到SpringBoot的静态资源目录,编译的时候,将webapp目录拷贝到 META-INF/resources
,同时JSP文件没有直接暴露出来,而是包装在 /WEB-INF/jsp
目录下,这样外部就无法直接访问JSP页面,而是要通过SpringMVC重新转向到JSP页面。
<build>
...
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2、配置SpringMVC
编辑 application.properties
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
————————————————————————
配置完成后,运行SpringBoot:
访问JSP页面:
通过SpringMVC转向,可以访问JSP页面:
访问: http://127.0.0.1:2001/
![](https://img.haomeiwen.com/i595838/f63d57e0f81343aa.png)
JSP页面是无法直接访问的:
http://127.0.0.1:2002/WEB-INF/jsp/jspTest.jsp
![](https://img.haomeiwen.com/i595838/9fd243bf9949807b.png)
访问静态资源
访问: http://127.0.0.1:2001/public.txt
![](https://img.haomeiwen.com/i595838/29f345d1912f2d06.png)
具体工程代码,点击这里获取
四、SpringBoot整合ThymeLeaf
SpringBoot推荐的模版引擎是ThymeLeaf,SpringBoot配置ThymeLeaf比较简单,工程目录结构如下:
![](https://img.haomeiwen.com/i595838/b44ed19d884563e9.png)
注意:
1、ThymeLeaf模版引擎,会从 resources/templates
目录下读取模版,因此可以在该目录存放业务模版页面;
2、在 resources/static
目录下放静态文件,css/images/js 文件。
配置如下:
1、配置POM
由于SpringBoot默认使用 ThymeLeaf2.X版本,要使用3.X版本,需要额外指定:
...
<groupId>com.johnnian</groupId>
<artifactId>springboot-thymeleaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>
...
引入依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、配置ThymeLeaf参数
spring.thymeleaf.cache: false
spring.thymeleaf.mode: html
3、运行结果
访问: http://127.0.0.1:2001/
![](https://img.haomeiwen.com/i595838/55bb303d15d28d77.png)
具体工程代码,点击这里获取
网友评论