【JavaWeb】從spring到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項目

在這裏插入圖片描述

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值返回至前端

在這裏插入圖片描述

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 導入五個依賴、構建好三層

在這裏插入圖片描述

在這裏插入圖片描述

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小結

附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-drivencontext: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了。

在這裏插入圖片描述

3.2 Springboot具體實現

在這裏插入圖片描述

在這裏插入圖片描述

注意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 服務器。
在這裏插入圖片描述

3.3.2 項目結構的約定

springboot第二個約定,提供一個同一個項目結構,源工程均是src/main/java
resources資源目錄下兩個目錄一個文件,static目錄存放前端靜態文件,templates目錄存放前端模板(static中放靜態頁面html,而templates中放動態頁面jsp),application.properties用於全局常量配置
在這裏插入圖片描述

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

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

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

3.3.4 spring-boot-starter-web的jar包提供自動依賴/啓動依賴,如果是一個webstarter,默認認爲你是構建一個spring mvc的應用

在springboot項目中,僅依賴spring-boot-starter-web這個jar包,但是卻可以完成整個web操作,這是因爲其他的jar包依賴都使用 spring-boot-starter-web 自動依賴了,並且都已經匹配上正確的版本,不需要程序員關心。

在這裏插入圖片描述
在這裏插入圖片描述

在使用springboot項目的時候,我們再也不用擔心少導入的哪個依賴,或者依賴之間的版本匹配問題了,spring-boot-starter-web的自動依賴也是它的一個約定。

在springboot中,只要是使用了spring-boot-starter-web,就默認你是一個spring mvc應用,把需要的依賴自動配置給你了。

3.4 Springboot整合mybatis

3.4.1 導入兩個依賴、構建好三層、配置好數據庫四個

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

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

在這裏插入圖片描述

z
在這裏插入圖片描述

UserMapper.xml儘量放在resources目錄下,如果放在src/main/java/com/example/demo/dao/mappers 源碼目錄下,默認是不會被打包的,放在resources目錄下,要在application.properties文件中指定一下。

在這裏插入圖片描述

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

在這裏插入圖片描述
在這裏插入圖片描述

3.4.4 完成controller層,controller.HelloController.java

在這裏插入圖片描述

注意,一般404都是controller這裏的GetMapping錯了。

3.4.5 數據庫表設計和啓動類

在這裏插入圖片描述

在這裏插入圖片描述

啓動類中爲什麼要配置@ComponentScan註解:因爲springboot只掃描啓動類所在包及其子包下面的註解,該項目中啓動類在com.example.demo下面,可以去掉@Component(“com.example.demo”)這個註解,如下:
在這裏插入圖片描述
啓動類中爲什麼要配置@MapperScan註解:@ComponentScan 只能掃描指定目錄下spring中的註解,要掃描ibatis中的@Mapper註解,所以這裏使用@MapperScan

3.4.6 運行成功

在這裏插入圖片描述

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依賴
在這裏插入圖片描述
四種方式
在這裏插入圖片描述

注意,controller的方法名儘量不要與頁面名稱重合,比如這裏,都加上了say前綴,sayhello sayhello2 sayhello3 sayhello4

方式1運行成功:

在這裏插入圖片描述
方式2運行成功:
在這裏插入圖片描述
方式3運行成功:
在這裏插入圖片描述
方式4運行成功:

在這裏插入圖片描述
在這裏插入圖片描述

四、小結

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章