【JavaWeb】从spring到springboot

文章目录

  • 一、前言
  • 二、Spring项目
    • 2.1 Spring步骤
    • 2.2 Spring具体实现
    • 2.3 小结
    • 2.4 spring整合mybatis
      • 2.4.1 导入五个依赖、构建好三层
      • 2.4.2 完成dao层,User.java Mapper.java Mapper.xml
      • 2.4.3 service层,IUserService.java UserServiceImpl.java
      • 2.4.4 完成controller层,UserController.java
      • 2.4.5 spring配置文件、springmvc配置文件、数据库表设计
      • 2.4.6 运行成功
    • 2.5 SSM小结
  • 三、Springboot项目
    • 3.1 Springboot项目引入
    • 3.2 Springboot具体实现
    • 3.3 Springboot约定优于配置-Springboot的四大约定
      • 3.3.1 只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)
      • 3.3.2 项目结构的约定
      • 3.3.3 默认提供配置文件application.properties
      • 3.3.4 spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用
    • 3.4 Springboot整合mybatis
      • 3.4.1 导入两个依赖、构建好三层、配置好数据库四个
      • 3.4.2 完成dao层,dao.entity.User.java dao.mapper.UserMapper.java resources.UserMapper.xml
      • 3.4.3 完成services层,services.IUserService.java services.impl.UserServiceImpl.java
      • 3.4.4 完成controller层,controller.HelloController.java
      • 3.4.5 数据库表设计和启动类
      • 3.4.6 运行成功
    • 3.5 springboot小结
    • 附:springboot没有视图解析器,如果完成页面跳转?
  • 四、小结

一、前言

从spring到springboot的三个原因
Spring本身配置的重量化
Spring web项目的配置太多
微服务的萌芽阶段,需要一个轻量级框架

idea快捷键 search everything double shift

二、Spring项目

2.1 Spring步骤

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 黑体标粗。

2.2 Spring具体实现

1、基于maven搭建webapp项目

【JavaWeb】从spring到springboot_第1张图片

2、然后,pom.xml添加Spring需要的依赖

【JavaWeb】从spring到springboot_第2张图片

3、web.xml中添加servlet

【JavaWeb】从spring到springboot_第3张图片

注意:classpath就是resources目录

4、webapp同级目录下,新建resources/dispatcher.xml

【JavaWeb】从spring到springboot_第4张图片

【JavaWeb】从spring到springboot_第5张图片

servlet-dispatcher.xml 中注解扫描、视图解析
【JavaWeb】从spring到springboot_第6张图片

【JavaWeb】从spring到springboot_第7张图片

5、新建源码目录 source root

【JavaWeb】从spring到springboot_第8张图片

servlet-dispatcher.xml 配置开启注解扫描

【JavaWeb】从spring到springboot_第9张图片
6、部署到tomcat

【JavaWeb】从spring到springboot_第10张图片

【JavaWeb】从spring到springboot_第11张图片

【JavaWeb】从spring到springboot_第12张图片

【JavaWeb】从spring到springboot_第13张图片

7、运行成功,localhost:8080/test,controller中的return值返回至前端

【JavaWeb】从spring到springboot_第14张图片

2.3 小结

①pom.xml导入两个依赖spring-context spring-webmvc;
②web.xml 配置 servlet-dispatcher.xml 或 springmvc-servlet.xml (名称自定义),新建resources/servlet-dispatcher.xml 或 springmvc-servlet.xml;
③工程文件java 设置controller。

2.4 spring整合mybatis

2.4.1 导入五个依赖、构建好三层

【JavaWeb】从spring到springboot_第15张图片

【JavaWeb】从spring到springboot_第16张图片

2.4.2 完成dao层,User.java Mapper.java Mapper.xml

【JavaWeb】从spring到springboot_第17张图片

【JavaWeb】从spring到springboot_第18张图片

【JavaWeb】从spring到springboot_第19张图片

2.4.3 service层,IUserService.java UserServiceImpl.java

【JavaWeb】从spring到springboot_第20张图片

【JavaWeb】从spring到springboot_第21张图片

2.4.4 完成controller层,UserController.java

【JavaWeb】从spring到springboot_第22张图片

2.4.5 spring配置文件、springmvc配置文件、数据库表设计

【JavaWeb】从spring到springboot_第23张图片

【JavaWeb】从spring到springboot_第24张图片

数据库表设计

【JavaWeb】从spring到springboot_第25张图片

2.4.6 运行成功

【JavaWeb】从spring到springboot_第26张图片

2.5 SSM小结

附1:IOC和DI
IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象。
DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。

附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 路径

附3: mvc:annotation-driven和context:annotation-config/
前者 mvc:annotation-driven 在web.xml中DispatcherServlet指定的配置文件,标志启动注解驱动, 是spring MVC为@Controllers分发请求所必须的,需要写。
后者在web.xml中的contextConfigLocation指定的配置文件中,当使用 context:component-scan/ 后,就可以将 context:annotation-config/ 移除了。

附4:Spring和SpringMVC的父子关系
Spring和SpringMVC的容器具有父子关系,Spring容器为父容器,SpringMVC为子容器,子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean。所以,可以在@Controller中注入@Service,@Component,@Repository等Bean,但是反过来就不行。
@Service,@Repository,@Component为什么要与@Controller要分开配置扫描。在SpringMVC的配置文件中扫描Controlller Bean(@Controller),在Spring的配置文件中扫描除了Controller的其他Bean(如@Service,@Repository,@Component等)。
1、极端:仅使用Spring扫描所有的bean,不可以
SpringMVC在匹配Controller与url的映射关系时只会在自己的上下文中查找Controller进行请求的处理。由于所有Controller的都在Spring容器中,SpringMVC找不到Controller对象,报404错误。(另外,此时的@Controller Bean可以注入@Service Bean中,因为两者都在Spring容器中,@Controller Bean可以被Spring注入)
2、第一个极端修改:Spring扫描所有Bean,SpringMVC扫描@Controller Bean,可以
没有问题,Controller与URL正常映射。此外,@Service Bean可以注入@Controller Bean(来自Spring容器非SpringMVC容器)。
3、极端:仅使用SpringMVC扫描所有的bean,可以
这就是自家项目的配置方法,使用上完全没有问题。所以我们项目中根本没有使用Spring的容器,而是用的SpringMVC的容器。(我们的项目就是用是springmvc扫描所有spring注解,不包括@Mapper,它是ibatis注解
所以,分开扫描的好处是便于扩展,如果要是项目需要加入Struts等可以整合进来,分开配置可以使SpingMVC和Struts都使用可使用Spring中的Bean。若只使用SpringMVC扫描,那么Struts中无法使用SpringMVC中的Bean。

附5:@Controller 和 @RestController
@Controller @RequestBody @RestController 三个都是spring注解,由于后端更多的是返回数据而不是页面跳转,所有@RestController出现了
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面;若返回json等内容到页面,则需要加@ResponseBody注解。
@CrossOrigin
@Controller
public class FileUploadController {
//跳转到上传文件的页面
@RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
public String goUploadImg() {
//跳转到 templates 目录下的 uploadimg.html
return “uploadimg”;
}
//处理文件上传
@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
public @ResponseBody String uploadImg(@RequestParam(“file”) MultipartFile file,
HttpServletRequest request) {
System.out.println(“调用文件上传方法”);
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();
2.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面。
@CrossOrigin
@RestController /* @Controller + @ResponseBody*/
public class HospitalController {
//注入Service服务对象
@Autowired
private HospitalService hospitalService;
/**
* 查询所有医院信息(未分页)
*/
@RequestMapping(value = “findAllHospital”,method = RequestMethod.GET)
public List findAllHospital(){
List hospitalList= hospitalService.findAllHospital();
return hospitalList;
}

附6:@GetMapping和@RequestMapping
@GetMapping @PostMapping @RequestMapping 三个都是spring注解
@GetMapping用于将HTTP get请求映射到特定处理程序的方法注解
具体来说,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping用于将HTTP post请求映射到特定处理程序的方法注解
具体来说,@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
@GetMapping("/getRule")
public Rule getRule(){
Rule rule=new Rule(" @GetMapping",“404”);
return rule;
}
@RequestMapping(method = RequestMethod.GET ,value = “/getRule2”)
public Rule getRule2(){
Rule rule=new Rule("@RequestMapping(method = RequestMethod.GET ",“404”);
return rule;
}

三、Springboot项目

3.1 Springboot项目引入

springboot 在约定优于配置理念下,是 springframework 的脚手架,快速高效的构建应用。
springboot starter-web的jar,会自动内置一个tomcat,不再需要配置tomcat了。

【JavaWeb】从spring到springboot_第27张图片

3.2 Springboot具体实现

【JavaWeb】从spring到springboot_第28张图片

【JavaWeb】从spring到springboot_第29张图片

注意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下的文件夹并运行。

3.3 Springboot约定优于配置-Springboot的四大约定

Springboot是一个依赖优于配置理论的产物,主要包括四个约定。
1、只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)
2、项目结构的约定
3、默认提供配置文件application.properties
4、spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用

3.3.1 只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)

像上面的springboot的项目一样,自带tomcat容器,不需要额外提供,值得注意的是,springboot只是模式tomcat服务器,可以替换,一般来说,springboot可以支持四种服务器,分别是 tomcat jetty Undertow Reactor,其中,前三种是Servlet服务器,最后一种是Reactive 服务器。
【JavaWeb】从spring到springboot_第30张图片

3.3.2 项目结构的约定

springboot第二个约定,提供一个同一个项目结构,源工程均是src/main/java
resources资源目录下两个目录一个文件,static目录存放前端静态文件,templates目录存放前端模板(static中放静态页面html,而templates中放动态页面jsp),application.properties用于全局常量配置
【JavaWeb】从spring到springboot_第31张图片

其中,static目录存放前端静态文件,templates目录存放前端模板,application.properties存放全局常量配置信息。

3.3.3 默认提供配置文件application.properties

【JavaWeb】从spring到springboot_第32张图片

【JavaWeb】从spring到springboot_第33张图片

【JavaWeb】从spring到springboot_第34张图片

3.3.4 spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用

在springboot项目中,仅依赖spring-boot-starter-web这个jar包,但是却可以完成整个web操作,这是因为其他的jar包依赖都使用 spring-boot-starter-web 自动依赖了,并且都已经匹配上正确的版本,不需要程序员关心。

【JavaWeb】从spring到springboot_第35张图片
【JavaWeb】从spring到springboot_第36张图片

在使用springboot项目的时候,我们再也不用担心少导入的哪个依赖,或者依赖之间的版本匹配问题了,spring-boot-starter-web的自动依赖也是它的一个约定。

在springboot中,只要是使用了spring-boot-starter-web,就默认你是一个spring mvc应用,把需要的依赖自动配置给你了。

3.4 Springboot整合mybatis

3.4.1 导入两个依赖、构建好三层、配置好数据库四个

【JavaWeb】从spring到springboot_第37张图片

【JavaWeb】从spring到springboot_第38张图片

【JavaWeb】从spring到springboot_第39张图片

3.4.2 完成dao层,dao.entity.User.java dao.mapper.UserMapper.java resources.UserMapper.xml

【JavaWeb】从spring到springboot_第40张图片

【JavaWeb】从spring到springboot_第41张图片
【JavaWeb】从spring到springboot_第42张图片

UserMapper.xml尽量放在resources目录下,如果放在src/main/java/com/example/demo/dao/mappers 源码目录下,默认是不会被打包的,放在resources目录下,要在application.properties文件中指定一下。

【JavaWeb】从spring到springboot_第43张图片

3.4.3 完成services层,services.IUserService.java services.impl.UserServiceImpl.java

【JavaWeb】从spring到springboot_第44张图片
【JavaWeb】从spring到springboot_第45张图片

3.4.4 完成controller层,controller.HelloController.java

【JavaWeb】从spring到springboot_第46张图片

注意,一般404都是controller这里的GetMapping错了。

3.4.5 数据库表设计和启动类

【JavaWeb】从spring到springboot_第47张图片

【JavaWeb】从spring到springboot_第48张图片

启动类中为什么要配置@ComponentScan注解:因为springboot只扫描启动类所在包及其子包下面的注解,该项目中启动类在com.example.demo下面,可以去掉@Component(“com.example.demo”)这个注解,如下:
【JavaWeb】从spring到springboot_第49张图片
启动类中为什么要配置@MapperScan注解:@ComponentScan 只能扫描指定目录下spring中的注解,要扫描ibatis中的@Mapper注解,所以这里使用@MapperScan

3.4.6 运行成功

【JavaWeb】从spring到springboot_第50张图片

3.5 springboot小结

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文件中

附:springboot没有视图解析器,如果完成页面跳转?

回答:两种方式,static和templates

新建springboot工程,导入thymeleaf依赖
【JavaWeb】从spring到springboot_第51张图片
四种方式
【JavaWeb】从spring到springboot_第52张图片

注意,controller的方法名尽量不要与页面名称重合,比如这里,都加上了say前缀,sayhello sayhello2 sayhello3 sayhello4

方式1运行成功:

【JavaWeb】从spring到springboot_第53张图片
方式2运行成功:
【JavaWeb】从spring到springboot_第54张图片
方式3运行成功:
【JavaWeb】从spring到springboot_第55张图片
方式4运行成功:

【JavaWeb】从spring到springboot_第56张图片
【JavaWeb】从spring到springboot_第57张图片

四、小结

Springboot是Spring的脚手架,完成对Spring封装,使后台开发更加高效。

spring工程代码:https://download.csdn.net/download/qq_36963950/12552110
springboot工程代码:https://download.csdn.net/download/qq_36963950/12552116
springboot页面跳转工程代码:https://download.csdn.net/download/qq_36963950/12552737

你可能感兴趣的:(JavaWeb)