?
?
一、前言从spring到springboot的三个原因
Spring本身配置的重量化
Spring web项目的配置太多
微服务的萌芽阶段,需要一个轻量级框架
idea快捷键 search everything double shift
二、Spring项目SSM与springboot的关系:
springboot并不是SSM的升级,而是spring+springMVC的简化,即
springboot == SSM 错误
springboot + Mybastis == SSM 正确
即,使用springboot,还是需要Mybatis的。
1、创建一个maven项目结构
2、pom.xml添加两个依赖:spring-context的依赖、spring-webmvc的依赖
3、web.xml DispatcherServlet
4、启动一个springmvc的配置,Dispatcher-servlet.xml
5、创建一个controller,发布一个http请求
6、发布到jsp/servlet容器
Spring需要 1 2 3 4 5 6,但是Springboot仅需要 5 黑体标粗。
1、基于maven搭建webapp项目
2、然后,pom.xml添加Spring需要的依赖
3、web.xml中添加servlet
注意:classpath就是resources目录
4、webapp同级目录下,新建resources/dispatcher.xml
servlet-dispatcher.xml 中注解扫描、视图解析
5、新建源码目录 source root
servlet-dispatcher.xml 配置开启注解扫描
6、部署到tomcat
7、运行成功,localhost:8080/test,controller中的return值返回至前端
①pom.xml导入两个依赖spring-context spring-webmvc;
②web.xml 配置 servlet-dispatcher.xml 或 springmvc-servlet.xml (名称自定义),新建resources/servlet-dispatcher.xml 或 springmvc-servlet.xml;
③工程文件java 设置controller。
【源码解析002】告诉我们,一定要告诉Spring ioc容器具体类,所以这里ServiceImpl实现类需要注解,但是Service接口不用注解
数据库表设计
附1:IOC和DI
IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象。
DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。
三、Springboot项目附2:spring配置文件和springmvc配置文件
SSM两个配置文件(web.xml指定两个配置文件 servlet-dispatcher.xml/springmvc-servlet.xml 和 mybatis xml配置)
第一个配置文件,springmvc的配置文件,对于web.xml将拦截到的请求(一般是所有请求)转发到ServletDispatcher对应的xml配置文件,一般是包含视图解析器和扫描spring注解component-scan,视图解析器属于springmvc,扫描spring注解属于spring。视图解析器只有在controller返回ModelAndView,需要打开jsp页面时定位jsp页面使用,如果controller返回值字符串String和类对象,前端直接显示,没用。扫描spring注解component-scan主要是扫描@Controller @Service @Repository,使controller service entity 不再 applicationContext.xml / servlet-Dispatcher.xml 中配置,还是用@Autowired/@Resource 自动注入,不再需要setter-getter,主要是controller service
第二个配置文件,spring的配置文件,数据库连接四个常量 + MapperScan + Mapper.xml 路径
springboot 在约定优于配置理念下,是 springframework 的脚手架,快速高效的构建应用。
springboot starter-web的jar,会自动内置一个tomcat,不再需要配置tomcat了。
注意1:构建springboot项目之前,配置好全局maven。idea 配置全局默认maven ,File/Other Settings/Default Settings…/Maven, File/Settings/Maven 只能配置当前项目的maven,新建springboot项目要先配置好默认的Maven相关,因为在新建springboot项目的时候无法配置。
注意2:构建springboot项目开始:idea新建springboot项目的时候,可以使用 https://start.aliyun.com/ 或者 https://start.spring.io 或者 http://start.spring.io ,笔者这里使用 http://start.spring.io 。
注意3:启动Springboot项目报错:IDEA运行Springboot报错,找不到org.springframework.context.ConfigurableApplicationContext类,可删除本地?/ .m2 / repository / org / springframework下的文件夹并运行。
Springboot是一个依赖优于配置理论的产物,主要包括四个约定。
1、只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)
2、项目结构的约定
3、默认提供配置文件application.properties
4、spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用
像上面的springboot的项目一样,自带tomcat容器,不需要额外提供,值得注意的是,springboot只是模式tomcat服务器,可以替换,一般来说,springboot可以支持四种服务器,分别是 tomcat jetty Undertow Reactor,其中,前三种是Servlet服务器,最后一种是Reactive 服务器。
springboot第二个约定,提供一个同一个项目结构,源工程均是src/main/java
resources资源目录下两个目录一个文件,static目录存放前端静态文件,templates目录存放前端模板(static中放静态页面html,而templates中放动态页面jsp),application.properties用于全局常量配置
其中,static目录存放前端静态文件,templates目录存放前端模板,application.properties存放全局常量配置信息。
在springboot项目中,仅依赖spring-boot-starter-web这个jar包,但是却可以完成整个web操作,这是因为其他的jar包依赖都使用 spring-boot-starter-web 自动依赖了,并且都已经匹配上正确的版本,不需要程序员关心。
在使用springboot项目的时候,我们再也不用担心少导入的哪个依赖,或者依赖之间的版本匹配问题了,spring-boot-starter-web的自动依赖也是它的一个约定。
在springboot中,只要是使用了spring-boot-starter-web,就默认你是一个spring mvc应用,把需要的依赖自动配置给你了。
UserMapper.xml尽量放在resources目录下,如果放在src/main/java/com/example/demo/dao/mappers 源码目录下,默认是不会被打包的,放在resources目录下,要在application.properties文件中指定一下。
注意,一般404都是controller这里的GetMapping错了。
启动类中为什么要配置@ComponentScan注解:因为springboot只扫描启动类所在包及其子包下面的注解,该项目中启动类在com.example.demo下面,可以去掉@Component(“com.example.demo”)这个注解,如下:
启动类中为什么要配置@MapperScan注解:@ComponentScan 只能扫描指定目录下spring中的注解,要扫描ibatis中的@Mapper注解,所以这里使用@MapperScan
? | spring +springmvc+mybatis | springboot +mybatis |
---|---|---|
web.xml | 指定contextConfigLocation和DispatcherServlet配置文件 | 没有web.xml文件,没有DispatcherServlet配置文件,没有contextConfigLocation配置文件 |
视图解析器 | 在DispatcherServlet配置文件中 | 没有视图解析器 |
spring注解扫描器 | 本项目在DispatcherServlet配置文件中(也可以让springmvc扫描Controller,spring扫描service component/repository) | spring注解扫描在启动类中 |
数据库四个属性 | contextConfigLocation配置文件中 | application.properties文件中 |
Mapper类扫描 | contextConfigLocation配置文件中 | mapper注解扫描在启动类中 |
Mapper.xml | contextConfigLocation配置文件中 | application.properties文件中 |
回答:两种方式,static和templates
新建springboot工程,导入thymeleaf依赖
四种方式
注意,controller的方法名尽量不要与页面名称重合,比如这里,都加上了say前缀,sayhello sayhello2 sayhello3 sayhello4
方式1运行成功:
方式2运行成功:
方式3运行成功:
方式4运行成功:
Springboot是Spring的脚手架,完成对Spring封装,使后台开发更加高效。
spring工程代码:
springboot工程代码
springboot页面跳转工程代码
?
原文:https://blog.51cto.com/u_15287666/2993589