IOC:交给Spring创建对象并进行管理
DI:依赖注入
SpringMVC
SpringMVC框架基于Spring框架之上的
主要解决后端服务器接收客户端提交的请求,并给予响应的相关问题
MVC = Model + View + Controller
Model:数据模型 ,通常是由业务逻辑层和数据访问层构成
View:视图
Controller:控制器
MVC:为项目中代码的职责进行划分
实现流程:
用户发送请求至前端控制器DispatcherServlet
DispatcherServlet收到请求调用HandlerMapping处理器映射器。
处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
执行处理器(Controller,也叫后端控制器)。
Controller执行完成返回ModelAndView
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
DispatcherServlet将ModelAndView传给ViewResolver视图解析器
ViewResolver解析后返回具体View
DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
DispatcherServlet响应用户
SpringMVC作用:解决了接收请求、相应结果的相关问题
开发流程:
1.依赖项(Spring项目)+ spring-boot-starter-web(包含spring-boot-starter)
2.添加Controller
package com.aries.spring.serve.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author 丁少珩
* @Date 2022 07 16 20 06
**/
//添加@Controller注解才会被框架视为控制器,才可以用于接收请求,响应结果
@Controller
public class DemoController {
//自定义请求的方法
//添加@RequestMapping系列注解:配置"请求路径"与"控制器的方法"的映射关系
//方法的返回值是String类型,返回值表示“视图”名称(不是前后端分离项目),
@RequestMapping("/delete-demo")
// 当使用“响应正文”模式后,返回的字符串将作为“正文”响应到客户端(是前后端分离项目)
//@ResponseBody将java对象转换成JSON格式的数据
/*json数据
{
"name":"lisi",
"age":16
}
json对象
{
name:"lisi",
age:16
}*/
@ResponseBody
public String delete(){
System.out.println("DemoController.delete");
return "del";
}
}
怎么判断注解应放在什么位置,例注解@RequestMapping
3、注解@RequestMapping
我们打开源码进行查看
4.请求方式:
在@RequestMapping
注解中,还有method
属性,可以限制请求方式(GET / POST等),其语法大概是:
@RequestMapping(value = "/add-new", method = RequestMethod.POST)
以上配置表示“只允许使用POST方式提交请求”,如果使用其它请求方式,将出现405错误!
在Spring MVC框架中,定义一系列的限制请求方式的注解,例如:
@GetMapping
:将请求方式限制为GET,除了不能添加在类上,其它用法与@RequestMapping
相同@PostMapping
:将请求方式限制为POST,除了不能添加在类上,其它用法与@RequestMapping
相同- 其它
在开发实践中,控制器类上使用@RequestMapping
,在方法上使用@GetMapping
或@PostMapping
,
通常,以“获取数据”为主要目的的请求应该使用@GetMapping
(例如查看订单列表、查看商品详情),否则,使用@PostMapping
。
在学习过程中,在没有调试手段之前,推荐全部@RequestMapping
,以便于测试访问。
@RestController
@RequestMapping(value = "/demos",method = RequestMethod.POST)
public class DemoController {
@RequestMapping("/list")
public String list(){
System.out.println("DemoController.list");
return "list-demo";
}
//自定义请求的方法
//添加@RequestMapping系列注解:配置"请求路径"与"控制器的方法"的映射关系
//方法的返回值是String类型,返回值表示“视图”名称(不是前后端分离项目),
@RequestMapping("/delete")
// 当使用“响应正文”模式后,返回的字符串将作为“正文”响应到客户端(是前后端分离项目)
/*json数据
{
"name":"lisi",
"age":16
}
json对象
{
name:"lisi",
age:16
}*/
public String delete(){
System.out.println("DemoController.delete");
return "del";
}
}
关于POJO规范
所有的POJO类型都应该符合以下设计标准:
- 所有属性都是私有的(
private
) - 每个属性都有对应的、命名规范的Setter & Getter
- 通过专业的开发工具生成即可
- 应该生成
hashCode()
和equals()
方法,且保证:2个对象中所有属性值都相同时,返回相同的hashCode()
,且这2个对象的equals()
对比结果为true
- 通过专业的开发工具生成即可
- 通过IntelliJ IDEA生成时,还有多种代码模版可选择,选择任何一个模版均可
- 实现序列化接口(
Serializable
)- 可以不生成序列化版本ID
以上规范是业内共同认可的,且认为你都会按此规范来编码,所以,许多框架都会自动调用其中的Setter & Getter方式,甚至会使用Serializable
来声明你的对象。
关于pojo类的命名
阿里巴巴的建议:
数据对象: ***DO ***表示表名
DO: Data Object
数据传输对象: ***DTO ***表示业务相关的名称
DTO: Data Transfer Object
展示对象: ***VO ***表示网页名称
VO: View Object
VO: Value Object
POJO:是DO/DTO/VO统称,禁止命名:***POJO
RESTful (设计风格 – 并不是规范或标准)
表现:将id或者类似具有”唯一性“的参数值作为URL的一部分,而不像传统方式参数体现