johnnian / Blog

MyBlog
Mozilla Public License 2.0
208 stars 59 forks source link

SpringBoot系列之—Web开发实战 #39

Open johnnian opened 7 years ago

johnnian commented 7 years ago

前言

SpringBoot除了可以开发后台服务(Service),Web页面端也是可以的。在之前接触的项目中,主要使用JSP来开发Java Web应用,不过在SpringBoot中,默认推荐是使用 Thymeleaf 模版引擎。

本文主要是小结下SpringBoot的Web开发,初步搭建其开发环境(JSP & Thymeleaf),也对原理进行一些小结。

一、SpringBoot静态资源目录

SpringBoot使用标准的Maven目录结构:

qq20171104-223759 2x

在编译打包成Jar包之后,Jar包内的目录结构是:

qq20171104-224151 2x

编译后,源码工程与编译后的目录对照如下:

/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默认从下面的文件夹中加载静态资源:

二、SpringBoot支持的模板引擎

SpringBoot除了支持JSP外,还支持比较多的模版引擎:

三、SpringBoot整合JSP

SpringBoot整合JSP,最终打包的时候,可以选择以 Jar包/War包的形式输出。

对于以war包输出,在外部tomcat运行,可以参考文尾的参考链接,官方的示例代码。

这里以jar包形式,便于独立运行,目录结构如下:

qq20171112-161912 2x

需要有下面几项配置:

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/

qq20171112-161121 2x

JSP页面是无法直接访问的:

http://127.0.0.1:2002/WEB-INF/jsp/jspTest.jsp

qq20171112-163927 2x

访问静态资源

访问: http://127.0.0.1:2001/public.txt

qq20171112-163309 2x

具体工程代码,点击这里获取

四、SpringBoot整合ThymeLeaf

SpringBoot推荐的模版引擎是ThymeLeaf,SpringBoot配置ThymeLeaf比较简单,工程目录结构如下:

qq20171112-164602 2x

注意:

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/

qq20171112-165626 2x

具体工程代码,点击这里获取

参考链接