SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架(指的就是springframework)的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以SringBoot是一个服务与框架的框架,服务范围是简化配置文件,所以从本质上来说,SpringBoot其实就是Spring框架的另一种表现形式。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
SpringBoot的父级依赖,只有继承它项目才是SpringBoot项目。
spring-boot-starter-parent是一个特殊的starter,他用来提供相关的Maven默认依赖。使用它之后,常用的包的依赖可以省去version标签
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动器依赖
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
spring-boot-maven-plugin插件是将springboot的应用程序打包成jar包的插件。将所有应用启动运行所需的jar包都包含进来,从逻辑上将具备独立运行的条件。当运行“mvn package”进行打包后,使用“java-jar”命令就可以直接运行
Spring Boot的启动类的作用是Spring Boot项目,是基于Main方法来运行的。
注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
SpringBoot将所有的功能场景都抽取出来,做一个个的starter(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景,在jar包管理上非常方便,最终实现一站式开发
SpringBoot提供一个名称为application的全局配置文件,支持两种格式properties格式与YAML格式
是SpringBoot的启动类
此注解等同于@Configuration+EnableAutoConfiguration+@ComponentScan的组合
@SpringBootConfiguration注解是@Confuguration注解的派生注解,跟@Configuration注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration是springboot的注解,而@Configuration是spring的注解
通过对bean对象的操作替代spring中的xml文件
SpringBoot自动配置:尝试根据你添加的jar依赖自动配置你的spring应用,是@AutoConfigurationPackage和@Import注解的组合
@AutoConfigurationPackage注解,自动注入主类下所在包下所有加了注解的类,以及配置类
直接导入普通类
导入实现ImportSelector接口的类
导入实现了ImportBeanDefinitionRegistrar接口的类
组件扫描,可自动发现和装配一些Bean
@RestController相当于@Controller+@ResponseBody注解。如果使用@RestController注解Controller中的方法无法返回页面,相当于在方法上面自动加了@ResponseBody注解,所以没办法跳转并传输数据到另一个页面,返回的内容就是return里的内容。
@GetMapping注解是@RequestMapping(method=RequestMethod.GET)的缩写
@PostMapping注解是@RequestMapping(method=RequestMethod.POST)的缩写
@PutMapping注解是@RequestMapping(method=RequestMethod.PUT)的缩写
@DeleteMapping注解是@RequestMapping(method=RequestMethod.DELETE)的缩写
在Springboot项目中没有我们之前常规web开发的WebContent(WebApp),它只有src目录。在src/main/resoueces下有两个文件夹。static和templates。SpringBoot默认在static目录中存放静态页面,而templates中放动态页面
SpringBoot通过classpath/static目录访问静态资源。注意存放静态资源的目录名称必须是static
在SpringBoot中不推荐使用jsp作为视图层技术,而是默认使用Thymeleaf来做动态页面,Thymeleaf目录就是是存放Thymeleaf的页面
Thymeleaf的主要目标是将优雅的自然模板带到开发工作流程中,并将HTML在浏览器中正确显示,并且可以作为静态原型,让开发团队能更容易地协作。Thymeleaf能够处理HTML,XML,JavaScript,Css甚至纯文本。
长期以来,jsp在视图领域有非常重要的地位,随着时间的变迁,出现了一位新的挑战者:Thymeleaf,Thymeleaf是原生的,不依赖于标签库,他能子啊接受原始HTML的地方进行编辑和渲染,因为他没有与Servlet规范耦合,因此Thymeleaf模板能进入jsp所无法涉足的领域
命令空间:xmlns:th=“http://www.thymeleaf.org”
th:text |
---|
在页面中输出值 |
th:value |
---|
可以将一个值放入到input标签的value中 |
Thymeleaf提供了一些内置对象,内置对象可直接在模板中使用。这些对象是以#引用的
使用内置对象的语法
${#strings.isEmpty(key)} |
---|
判断字符串是否为空,如果为空返回true,否则返回flase |
${#strings.contains(msg,‘T’)} |
---|
判断字符串是否包含指定的子串,如果包含返回true,否则返回false |
${#string.startsWith(msg,‘a’)} |
---|
判断当前当前字符串是否以子串开头,如果是返回true,否则返回false |
${#string.endWith(msg,‘a’)} |
---|
判断当前当前字符串是否以子串开头,如果是返回true,否则返回false |
${#string.length(msg)} |
---|
返回字符串的长度 |
${#strings.indexOf(msg,‘h’)} |
---|
查找子串的位置,并返回改子串的下表,如果没找到则返回-1 |
${#strings.substring(msg,2,5)} |
---|
截取子串。用户与jdk String类下SubString方法相同 |
${#dates.format(key)} |
---|
格式化日期,默认的以浏览器默认语言为格式化标准 |
${#dates.format(key,‘yyyy-MM-dd’)} |
---|
按照自定义格式做日期转换 |
${#dates.year(key)} 取年 |
---|
${#dates.month(key)} 取月 |
${#dates.day(key)} 取日 |
th:if |
---|
条件判断 |
th:switch/th:case |
---|
th:switch/th:case与java中的switch语句等效,有条件地显示匹配的内容。如果有多个匹配结果只选择第一个显示。 |
th:case=“*”表示Java中的switch的default,即没有case的值为true时则显示th:case= “ *” 的内容 |
th:each |
---|
迭代器,用于循环迭代集合(迭代List) |
HttpServletRequest
request.setAttribute(“req”,“HttpServletRequest”); |
---|
HttpSession
request.getSession().setAttribute(“sess”,HttpSession) |
---|
ServletContext
request.getsession().getServletContext().serAttribute(“app”,“Application”) |
---|
在Thymeleaf中的URL表达式的语法格式为@{}
绝对路径
绝对路径
相对路径
相对于当前项目的根 |
---|
相对路径 |
相对于服务器的根 |
---|
相对于服务器的根 |