SpringMVC
基于java实现MVC模型的轻量级Web框架
做Web程序开发
当我们的浏览器发出一个请求给到后端服务器以后,由servlet负责处理请求,
servlet只是能够接收请求产生响应,不能进行真正的数据处理
于是将后端服务拆分成
三层架构
web
负责页面数据的收集和产生页面
service
负责业务处理
dao
负责数据的持久化,存储和查询数据
最终得到数据并在表现层中组织出最终要得到的界面,再将该页面反馈给我们的浏览器
进阶版-MVC模式
将servlet三成三块
web变成 - contrller、View、Model三个部分1. 浏览器发送请求给controller控制器2. 由控制器调用我们的业务层3. 业务层调用数据层4. service得到数据之后最终展示出来给Model数据模型5. 然后将View也就是页面抽取出来,由view和model配合在一起工作6. 最终得到页面反馈给用户
View分为HTML+CSS+VUE+ElemetUIG构建页面
浏览器通过View用**异步调用**的形式调用我们的后端服务器Controller调用service调用dao
调用完之后最终会得到一个Model的对象后端服务器和前端页面通过json数据模式打交道
SpringMVC负责
以上Controller对应服务器开发,同时将操作完的数据转成json格式交给页面
M - 数据和业务
V - HTML
C - 交接
Spring SpringMVC SpringBoot 区别
Spring
IOC容器,用来管理Bean,使用依赖注入实现控制反转,降低耦合。可以很方便地整合各种框架
提供AOP机制弥补OOP代码重复的问题:
将不同类和方法中的相同的处理逻辑,抽取成切面,自动注入给方法执行
如日志、异常等 - 面向切面编程
SpringMVC
Spring对Web框架的一个解决方案,提供了一个总的前端控制器Servlet
用来接收请求,然后定义了一套路由策略(从url到handle的映射)及适配执行handle
将handle结果使用视图解析技术生成视图展现给前端
SpringBoot
Spring提供的一个快速开发包,能更快速地开发spring+springmvc应用
简化配置(约定大于配置),整合了一系列解决方案(starter机制)
redis、mongoDB、es可以开箱即用
首先创建一个com.example.controller包
设置一个UserController类
package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class UserController {@RequestMapping("/save")public void save(){System.out.println("save");}}
- Serlvet容器初始化配置类
创建一个com.example.config包
SerlvetContainersintConfig - servlet容器配置
public class SerlvetContainersintConfig extends AbstractDispatcherServletInitializer { //分派器Servlet初始化器@Override//Web相关组件:Controller、视图解析器等//Web上下文:处理HTTP请求、响应protected WebApplicationContext createServletApplicationContext() { //要求加载SpringMVC的容器对象AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}@Overrideprotected String[] getServletMappings() { //return new String[]{"/"}; //所有请求都归spring处理}@Overrideprotected WebApplicationContext createRootApplicationContext() { //加载Spring配置的容器对象return null;}
}
```AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();```
创建一个基于注解配置的Web应用上下文对象
AnnotationConfigWebApplicationContext - 注释配置Web应用上下文
报错
真的烦
com.intellij.execution.ExecutionException: 找不到此 Web 模块的
修改selvet-api依赖
<dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency>
not found for the web module
项目结构-工作-添加一个什么
运行之后会弹出一个404界面
我们在UserController下添加一个@ResponseBody
再将返回值改成String
然后return"{'info' : 'springmvc'}";
具体如下
@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("save");return"{'info' : 'springmvc'}";}}
启动服务器初始化过程
- 服务器启动,执行ServletContainerInitConfig类,初始化web容器
- 执行creatServletApplicationContext方法,创建了WebApplicationContext对象
- 加载SpringConfig
- 执行@ComponentScan加载对应的bean
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法
- 执行getServletMappings方法,定义所有的请求都通过SpringMVC
单次请求过程 - 发送请求localhost/save
- web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
- 解析请求路径/save
- 由/save匹配执行对应的方法save();
- 执行save()
- 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方
web容器
-ServletContext
--WebApplicationContext
---UserController
/save -> save()