1.什么是SSM
SSM其实就是Spring Spring MVC MyBatis.Spring +Spring MVC+ MyBatis是一种常见的 Java 企业级开发框架组合,用于构建基于 MVC 设计模式 的 Web 应用程序。
各模块的作用:
Spring
- 核心功能:依赖注入(DI)、面向切面编程(AOP)、事务管理等。
- 用途:统一管理对象的生命周期和依赖关系,降低代码耦合度。
Spring MVC
- 核心功能:处理 HTTP 请求、响应、控制器(Controller)、视图解析等。
- 用途:实现 Web 层的逻辑控制,将用户请求转发到对应的业务逻辑。
MyBatis
- 核心功能:动态 SQL 映射、数据库持久化操作。
- 用途:简化 JDBC 操作,通过 XML 或注解定义 SQL 语句,避免手动拼接 SQL
接下来我们介绍下Spring MVC.
2.什么是Spring MVC
(a).MVC
MVC是一种软件设计架构模式.他把软件系统分为模型,视图,和控制器三个部分.
这种设计模式就是首先用户通过视图发送请求,此时控制器接收到请求之后会交给模型处理,处理完成后会返回结果给控制器,控制器再将结果返回给视图
View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型
来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型
就像是我们去饭馆吃饭.服务员会将我们点的饭菜告诉柜台的收银人员,收银人员将菜单交给后厨,后厨只是负责做菜就可以,做完以后交给收银员,收银员交给服务员.最终我们到我们手里
上面的例子中
View(视图):就类似服务员,负责将我们的请求传递给收银员,并且最终给我们返回结果
Model(模型):就像是厨师,不关心外面的流程,只需要安心炒菜
Controller(控制器):就像是收银员,也就是服务员和后厨的中间人.有了中间人就可以就可以让他们进行交流.
(b).Spring MVC和MVC的关系
Spring MVC是基于MVC这种设计模式实现的.
(c).Spring Web MVC
Spring MVC的全称是Spring Web MVC.就是基于Spring MVC这种设计模式应用于网站开发.
Spring Web MVC 是 Spring 框架中用于实现 Web 层控制 的核心模块,属于 MVC 设计模式 的具体实现。它通过清晰的职责划分和高度灵活的配置,简化了 Web 应用的开发流程。
2.创建Spring项目
1.在idea上创建
首先创建项目-->定义好项目名称,选择语言,选择JDK版本-->接下来选择Spring Boot版本
已经想要引入的依赖即可.
2.在Spring官网创建(Spring Initializr)
3.在阿里云创建(Cloud Native App Initializer)3.代码
首先我们写 一个简单的代码
javapackage com.example.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/requst") @RestController public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello Spring"; } }
输出:
4.学习使用Spring MVC
4.1流程
1.建立连接:代码和浏览器建立连接。
2.请求:用户使用浏览器发送请求,要在代码中获得这个请求。
3.响应:MVC这一套下来以后会有一个具体的响应,所以需要让这个响应返回给用户。
4.2建立连接
让浏览器和我们的后端代码建立连接需要用到@RequstMapping 和@RequstController.
这两个注解.
接下来我们先了解下这两个注解:
@RequstMapping
1.在Spring MVC中,控制器(Controller)类里的方法会用这个注解来指定处理的URL路径。
@RequestMapping("/hello")可能对应到某个处理请求的方法上。那这样的话,当用户访问/hello时,这个方法就会被调用.
2.这个注解还能指定HTTP方法,比如GET、POST等。也就是说,除了路径之外,还可以通过method属性来限制请求的类型。比如,@RequestMapping(value="/hello",
method=RequestMethod.GET)这样的话,只有GET请求才会被这个方法处理。
java// 指定使用GET @RequestMapping(value = "/hello", method = RequestMethod.GET) public String sayHello() { return "hello, Spring MVC"; }
3.这个注解可以应用在类级别和方法级别。如果类上有一个@RequestMapping("/api"),而方法上有@RequestMapping("/users"),那么完整的路径应该是/api/users。这样的话,可以避免在每个方法里重复写相同的路径前缀.
@RequstController
@RestController是Spring MVC中的一个注解,它结合了@Controller和@ResponseBody的功能。@RestController会将每个方法返回的对象自动转换为JSON或XML响应,省去了单独的@ResponseBody注解。同时,它还隐式地添加了@Controller的注解,因此不需要再手动添加就可以接收和处理 HTTP 请求。
5.传递参数
5.1传递单个参数
5.1.1String类型
java@RequestMapping("/r1") public String r1(String name){ return "name="+name; }
5.1.2int类型
java@RequestMapping("/r2") public int r2(int age){ return age; }
但是使用int会存在一个问题:
如果浏览器不传递参数,那么使用int就会报错,我们可以看到状态码为500,就是服务器内部错误.所以我们尽量使用引用类型.引用类型不传参数的话服务器会返回一个null
java@RequestMapping("/r3") public String r3(Integer age){ return "age="+age; }
5.3设置参数时,传递的参数要与方法中的参数一致.否则不会成功传值
5.4参数过多我们可以使用对象传入
javapackage com.example.demo; public class Student { private String name; private Integer id; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", id=" + id + ", age=" + age + '}'; } }
java@RequestMapping("/r4") public Student r4(Student student){ return student; }
注:这里对象传入会有默认的初始化值,不传数据也会有,不会出现报错
5.5**@RequestParam()**
1.在传参中我们使用**@RequestParam()注解**,在URL中传参时只需要按照注解中的字符串传入即可.达到重命名效果
java@RequestMapping("/r5") public String r5(@RequestParam("UserName") String name){ return "name="+name; }
2.**@RequestParam()**还有一个机制:
使用**@RequestParam()**在URL或者body中必须要设置参数,否则就会报错
但是我们可以在注解中用关闭这个.默认是必填选项,不填的话会报400错误,也可以设置可以不填的选项,将required设置为false即可,这也是为了在后端开发的时候避免几个参数类似不好判断
3.@RequestParam() 作用就是一个用于从 HTTP 请求的查询参数(URL 参数)或表单数据中提取值的注解。
下面这行代码就是将HTTP请求中的查询参数通过**@RequestParam()**注解提取出值保存在集合中
java@RequestMapping("/r4") public String r4(@RequestParam List<String> list){ return "接受数组="+list; }
5.6@RequstBody
如果在body(正文)中传入数据可能不会返回正确的响应.
将客户端发送的
HTTP 请求体(Request Body)
内容自动转换为 Java 对象,支持 JSON、XML 等数据格式
java@RequestMapping("/r4") public Student r4(Student student){ return student; }
如果我们要在body(正文)中传输数据就需要使用@RequstBody注解
java@RequestMapping("/r6") public Student r6(@RequestBody Student student){ return student; }
此时我们再看下响应的结果