springmvc复习

1.入门

Spirngmvc-Servlet

Controller->Springmvc 产物

1.SpringMVC是一种表现层框架技术--

SpringMVC用于进行表现层功能开发

使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

创建Springfmvc控制器类

![a20b723675912525bb7fa4b6861f2445](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\a20b723675912525bb7fa4b6861f2445.png)

![804db24f3395fe5d5940d26edfc3ea33](G:\360MoveData\Users\nixg\Documents\Tencent Files\819429207\nt_qq\nt_data\Pic\2024-04\Ori\804db24f3395fe5d5940d26edfc3ea33.png)

springmvc0需要设定springmcv加载对应Bean

创建Tomcat的Servlet容器配置类

//4.定义servlet容器的配置类  
///AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类  AbstractDispatcherServletInitializer提供三个接口方法供用户实现

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    
    //加载springMVC配置 -第一个接口 创建Servlet容器时,加载SpringMVC对应的bean并放入
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
//设置Tomcat接收的请求哪些归SpringMVC处理
//getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理

protected String[] getServletMappings() {
    return new String[]{"/"};
}

//设置spring相关配置 如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,
protected WebApplicationContext createRootApplicationContext() {
    return null;
}

注解

Controller 设定SpringMVC的核心控制器bean

@RequestMapping 设置当前控制器方法请求访问路径

@ResponseBody 设置当前控制器方法响应内容为当前返回值,无需解析

综上-我们要导入spirngmvc容器

1.导入springmvc坐标 2.创建springmvc核心控制器bean 3.再配置类中进行指定加载4.配置tocat的路径哪些被springmvc管理

![67f41aab7f091ea29d50d4b977866e31](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\67f41aab7f091ea29d50d4b977866e31.png)

2.bean加载控制

springmvc-controller --业务层的service--注册为spirngbean的bean

1.因为功能不同,如何避免Spring错误的加载到SpringMVC的bean——加载Spring控制的bean的时候排除掉SpringMVC控制的bean

![48eb36fe246fbb47facf7e8f5eb31ff6](G:\360MoveData\Users\nixg\Documents\Tencent Files\819429207\nt_qq\nt_data\Pic\2024-04\Ori\48eb36fe246fbb47facf7e8f5eb31ff6.png)

非常麻烦 --还需要分开加载

案例、

![f924b648ab257fbefa08c871b796ebb5](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\f924b648ab257fbefa08c871b796ebb5.png)

这里就排除加载了springmvc的bean- 我们需要在写一个配置类来导入spirngmvc的bena

@Configuration
@ComponentScan("com.itheima.controller")---自动扫描
public class SpringMvcConfig {
}

3.springmvc容器的简化开发

![1b0641d49bc4e25a589d46b048d0c712](G:\360MoveData\Users\nixg\Documents\Tencent Files\819429207\nt_qq\nt_data\Pic\2024-04\Ori\1b0641d49bc4e25a589d46b048d0c712.png)

4.请求响应

1.请求映射路径

@RequestMapping

l设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

2.请求传参

![0ae8f28c7e68ec356172c7f4f322aabc](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\0ae8f28c7e68ec356172c7f4f322aabc.png)

![d5fd3828d3099bff24bbf90834041bff](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\d5fd3828d3099bff24bbf90834041bff.png)

2.请求传参

1.普通参数

1.url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

2.请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

@RequestParam("name")String userName

2.pojo类型参数

POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

3.嵌套pojo参数

请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

4.数组类型

数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数 String[] likes

l

5.集合类型 RequestParam

l集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

@RequestParam List likes

2.JSON

添加json数据转换相关坐标

com.fasterxml.jackson.core jackson-databind 2.9.0

开启自动转换json数据的支持

@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
public class SpringMvcConfig {
}

1.json数组 @RequestBody

将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

@RequestBody List likes

2.json对象

json数据与形参对象属性名相同,定义POJO类型形参即可接收参数

@RequestBody User user

3.json对象数组

json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

@RequestBody List list

区别

![697f5240f2ca11734b8ddf804fa935bc](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\697f5240f2ca11734b8ddf804fa935bc.png)

3.日期传参

![192cc0e58e4cc136b34168f56ccf355a](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\192cc0e58e4cc136b34168f56ccf355a.png)

![ab3b6686ddb4ec826f2990c1c925d36b](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\ab3b6686ddb4ec826f2990c1c925d36b.png)

image-20240414172132046

3.响应传递

1.文本返回

@ResponseBody -不仅仅可以将JSON对应类-还能告诉编译器转的是文本,而不是文件

2.json返回

返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

3.响应pojo集合

开对象-然后存进list集合中-返回list集合 默认返回的就是集合

List userList = new ArrayList();
userList.add(user1);
userList.add(user2);

@ResponseBody
名称 @ResponseBody
类型 方法\类注解
位置 SpringMVC控制器方法定义上方和控制类上
作用 设置当前控制器返回值作为响应体,
写在类上,该类的所有方法都有该注解功能
相关属性 pattern:指定日期时间格式字符串

说明:

  • 该注解可以写在类上或者方法上
  • 写在类上就是该类下的所有方法都有@ReponseBody功能
  • 当方法上有@ReponseBody注解后
    • 方法的返回值为字符串,会将其作为文本内容直接响应给前端
    • 方法的返回值为对象,会将对象转换成JSON响应给前端

此处又使用到了类型转换,内部还是通过Converter接口的实现类完成的,所以Converter除了前面所说的功能外,它还可以实现:

  • 对象转Json数据(POJO -> json)
  • 集合转Json数据(Collection -> json)

Rest风格

1.rest风格介绍

传统风格

  • http://localhost/user/getById?id=1 查询id为1的用户信息
  • http://localhost/user/saveUser 保存用户信息

REST

  • http://localhost/user/1
  • http://localhost/user
  • 根据路径 无法看出对应功能--具有隐私保护性

请求的方式比较多,但是比较常用的就4种,分别是GET,POST,PUT,DELETE

按照不同的请求方式代表不同的操作类型。

  • 发送GET请求是用来做查询
  • 发送POST请求是用来做新增
  • 发送PUT请求是用来做修改
  • 发送DELETE请求是用来做删除

上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范

2.路径传参 @PathVariable
 //设置当前请求方法为DELETE,表示REST风格中的删除操作
	@RequestMapping(value = "/users/{id}/{name}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id,@PathVariable String name)
名称 @PathVariable
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应

关于接收参数,我们学过三个注解@RequestBody@RequestParam@PathVariable,这三个注解之间的区别和应用分别是什么?

  • 区别
    • @RequestParam用于接收url地址传参或表单传参
    • @RequestBody用于接收json数据
    • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
  • 应用
    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数
    • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

springmvc开发特性

1.知识点1:@RestController
名称 @RestController
类型 类注解
位置 基于SpringMVC的RESTful开发控制器类定义上方
作用 设置当前控制器类为RESTful风格,
等同于@Controller与@ResponseBody两个注解组合功能
知识点2:@GetMapping @PostMapping @PutMapping @DeleteMapping
名称 @GetMapping @PostMapping @PutMapping @DeleteMapping
类型 方法注解
位置 基于SpringMVC的RESTful开发控制器方法定义上方
作用 设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,
例如@GetMapping对应GET请求
相关属性 value(默认):请求访问路径

Spring mvc 异常处理机制

![a4c33d1fd830a4bf2508db2f6b98e836](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\a4c33d1fd830a4bf2508db2f6b98e836.jpeg)

![b59e8bf4c2fbcc6be6fc912192f6f2df](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\b59e8bf4c2fbcc6be6fc912192f6f2df.jpg)

--增强类上指定-异常拦截器处理--基于AOP切面编程实现


案例处理-如题

![42419f57ee0003c58e6c059ba4fc1f58](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\42419f57ee0003c58e6c059ba4fc1f58.jpeg)

![b3b21d20c96ae90d732ce3cac09d5f68](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\b3b21d20c96ae90d732ce3cac09d5f68.jpeg)

![2bb0878bbc88b02c0ce024647e49ec70](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\2bb0878bbc88b02c0ce024647e49ec70.jpeg)

自写异常-根据异常严重程度来进行对应的出来

![6241b3e5f0b6762d7a7166eac8e101ba](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\6241b3e5f0b6762d7a7166eac8e101ba.jpeg)

抛出异常

拦截处理异常

![4cc146a7a81d28def5a9f72534f22ad3](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\4cc146a7a81d28def5a9f72534f22ad3.jpeg)

Springmvc -拦截器

1.拦截器案例

1.声明拦截器

![50fccfc54a1ef08467fab507b7fbce62](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\50fccfc54a1ef08467fab507b7fbce62.jpeg)

实现HandlerInt接口

--

定义配置类--将拦截器加入--同时定义哪些路径经过拦截器

![4e1d8d2c9b4fc6abd5689c2b51c82eb8](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\4e1d8d2c9b4fc6abd5689c2b51c82eb8.jpeg)

添加拦截器指定路径

![36622cc29c0f42ee7c4a6ee2cd430ebf](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\36622cc29c0f42ee7c4a6ee2cd430ebf.jpeg)

将拦截器加入配置

![1bc306f27cbc66a36cde282fec6227be](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\1bc306f27cbc66a36cde282fec6227be.jpeg)

2.拦截器流程

![4caa6002de9cae7bb61d1f4dc79fbf40](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\4caa6002de9cae7bb61d1f4dc79fbf40.jpeg)

![d63b5afd7e7aaff800a0a7fa06a00c25](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\d63b5afd7e7aaff800a0a7fa06a00c25.jpeg)

![267baa636fd682717e63a956def32ec5](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\267baa636fd682717e63a956def32ec5.jpeg)

![4b425f5665648fd64d2371a8e70aa4b7](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\4b425f5665648fd64d2371a8e70aa4b7.jpeg)

3.多拦截器

![c4698693771084332a51d147c5cdd2e7](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\c4698693771084332a51d147c5cdd2e7.jpeg)

![95d7648e9ae71b1f8e4a5ccf424adb04](G:\360MoveData\Users\nixg\Documents\Tencent Files\2583181473\nt_qq\nt_data\Pic\2024-04\Ori\95d7648e9ae71b1f8e4a5ccf424adb04.jpeg)

pdf-下载地址
链接:https://pan.baidu.com/s/1yrzjYOGgbCbPtg09BlfgEQ?pwd=95xp
提取码:95xp

posted @ 2024-03-31 11:55  逆向狗  阅读(16)  评论(0)    收藏  举报