在以前的方式开发WEB项目时可以选择整合SpringMVC或Struts2等MVC框架,导入相关jar包,开发工具选择eclipse集成tomcat后,将开发好的项目部署到tomcat服务器。
在基于SpringBoot开发WEB项目较为简单,Spring Boot已经集成了web开发相关的组件,在pom文件中导入配置如下:
新建项目
勾选Web
新建好WEB项目以后,pom文件里面会自动导入Spring-boot-starter-web配置,此配置已经为我们集成了SpringMVC的相关依赖以及内嵌了Servlet容器Tomcat、jetty、Undertow。
在web开发中避免不了图片、css、js等静态资源访问,Spring Boot已经提供对提供默认配置以及较好的支持。
Spring Boot 默认将 /** 所有访问映射到以下目录:
classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources
测试:
在src/main/resources下新建以下几个目录,并在每个目录下都放一张图片。
启动Spring Boot程序,打开浏览器输入以下几个地址:
http://localhost:8080/1.jpg
http://localhost:8080/2.jpg
http://localhost:8080/3.jpg
http://localhost:8080/4.jpg
http://localhost:8080/5.jpg
当浏览器访问资源时,会到META-INF/resources、public、resources、static这几个路径下去找相应的资源,能找到就返回该资源。
经过测试会发现,http://localhost:8080/5.jpg 访问不成功,原因就是aaa这个目录不在SpringBoot默认映射范围之内。
如果有特殊需要可以将自定义的目录进行映射,如映射aaa目录,在配置文件加入以下内容:
spring.resources.static-locations=classpath:/
启动Spring Boot程序继续访问http://localhost:8080/5.jpg,成功!
模板引擎介绍:
模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。在Spring Boot内嵌的容器中Tomcat、Jetty不支持以jar包的方式运行jsp,Undertow不支持jsp。
在Spring boot中提供了多种模板引擎Thymeleaf、FreeMarker、Velocity、Groovy、Mustache等,Spring Boot推荐Thymeleaf模板,因为Thymeleaf对SpringMVC支持比较好。
Thymeleaf是Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf的主要目标是提供一种优雅和高度可维护的创建模板的方式,对SpringMVC支持较好,使用Thymeleaf可以完全替代jsp。
Thymeleaf特点如下:
1、 Thymeleaf在没有网络的情况也可以运行,浏览器打开可以看到静态效果;支持html原型,服务端有数据返回会将静态数据替换掉,实现前后端分离;
2、 Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言;
3、 Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能;
spring-boot很多配置都有默认配置,比如默认页面映射路径为
classpath:/templates/*.html
以上这些配置除了Spring.thymeleaf.cache=false以外,开发时关闭缓存,不然没法看到实时页面,其他配置其他的都可以使用默认配置即可,有特殊需要时再进行修改。
通过ThymeleafProperties类源码了解默认配置。
@Controller
publicclass Web01Controller {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("name", "码到功成学院");
System.out.println("请求到了。。。。。。。。");
return"index";
}
}
注意:
@RequestMapping() 里面的值,不能和返回模板名字一样,否则将不能成功。
DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Spring boot thymeleaftitle>
head>
<body>
<h1 th:text="${name}">helloh1>
body>
html>