当前位置: 首页 > news >正文

SpringBootMVC相关内容

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");}}
  1. 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'}";}}

启动服务器初始化过程

  1. 服务器启动,执行ServletContainerInitConfig类,初始化web容器
  2. 执行creatServletApplicationContext方法,创建了WebApplicationContext对象
  3. 加载SpringConfig
  4. 执行@ComponentScan加载对应的bean
  5. 加载UserController,每个@RequestMapping的名称对应一个具体的方法
  6. 执行getServletMappings方法,定义所有的请求都通过SpringMVC
    单次请求过程
  7. 发送请求localhost/save
  8. web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
  9. 解析请求路径/save
  10. 由/save匹配执行对应的方法save();
  11. 执行save()
  12. 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方

web容器
-ServletContext
--WebApplicationContext
---UserController
/save -> save()

http://www.hskmm.com/?act=detail&tid=15965

相关文章:

  • 基于节流的流水线并行推理优化——gLLM
  • Corral the Cows
  • HarmonyOS 5 通知与语音能力开发实战:从消息推送到智能语音交互
  • HarmonyOS 5 Native与ArkTS混合开发实战:跨语言高性能组件开发
  • 实战:基于HarmonyOS 5构建分布式聊天通讯应用
  • Java-Eclipse使用-多维数组的使用
  • HarmonyOS 5 动画开发实战:从基础动效到高级交互动画
  • HarmonyOS 5 高级动效实战:粒子系统、路径动画与物理动效开发
  • 从范德蒙德矩阵聊开去.
  • HarmonyOS 5 动画性能优化深度解析:从原理到实践
  • HarmonyOS 5 性能优化全攻略:从启动加速到内存管理
  • #字符串执行函数——eval()、exec()和compile()详解
  • HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化
  • 【光照】[环境光ambient]以UnityURP为例
  • 浅谈当前时代下大学生的就业择业及人生规划
  • 实用指南:玳瑁的嵌入式日记---0923(ARM)
  • 个人博客搭建记录【hexo】
  • 喵喵喵
  • flink不同环境切换 - --
  • ps-填充色
  • HarmonyOS 5分布式数据同步实战:跨设备待办事项应用
  • 深入理解HarmonyOS 5的AVSession:构建跨设备媒体播放器
  • Extjs小例子
  • 匿名函数
  • HarmonyOS资源管理与访问:多分辨率与多语言适配
  • 面试官:为什么没有虚拟线程池?
  • 润生软件简介:以“重构与共生”引领商业未来
  • Python 并发编程
  • 安装pyautogui时与setuptool时冲突报错-module setuptools.dist has no attribute check_test_suite
  • 统计机器学习经典分类算法MATLAB实现