SpringBoot系列之—Web开发实战
本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/39,欢迎留言。
前言
SpringBoot除了可以开发后台服务(Service),Web页面端也是可以的。在之前接触的项目中,主要使用JSP来开发Java Web应用,不过在SpringBoot中,默认推荐是使用 Thymeleaf 模版引擎。
本文主要是小结下SpringBoot的Web开发,初步搭建其开发环境(JSP & Thymeleaf),也对原理进行一些小结。
一、SpringBoot静态资源目录
32406314-34000aa6-c1b1-11e7-883a-accf81b7d56a.pngSpringBoot使用标准的Maven目录结构:
32406321-5eeca616-c1b1-11e7-9df2-6f6cb4634d3c.png在编译打包成Jar包之后,Jar包内的目录结构是:
编译后,源码工程与编译后的目录对照如下:
/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包形式,便于独立运行,目录结构如下:
32697155-570058fc-c7c5-11e7-83f2-eb0e76019187.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/
32697231-355a9d50-c7c7-11e7-91c6-5b5b8fbd93a7.pngJSP页面是无法直接访问的:
http://127.0.0.1:2002/WEB-INF/jsp/jspTest.jsp
32697283-14ddc416-c7c8-11e7-8122-2d8024a240d8.png访问静态资源
访问: http://127.0.0.1:2001/public.txt
32697259-971f50ee-c7c7-11e7-81da-ce23c3a2898b.png具体工程代码,点击这里获取
四、SpringBoot整合ThymeLeaf
SpringBoot推荐的模版引擎是ThymeLeaf,SpringBoot配置ThymeLeaf比较简单,工程目录结构如下:
32697398-9556052a-c7ca-11e7-9b06-ad554d1b96c2.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/
32697400-9ba50de0-c7ca-11e7-82c2-29528cb659ac.png具体工程代码,点击这里获取