0
点赞
收藏
分享

微信扫一扫

Spring MVC 高级框架的核心

言诗把酒 2022-12-07 阅读 138
springmvc

目录

1. 什么是 Spring MVC

1.1 如何理解 MVC

1.2 Spring MVC 和 MVC 的关系

2. 如何学习 Spring  MVC

2.1 将浏览器和服务器连接起来

2.1.1 @RequestMapping, @GetMapping, @PostMapping 三个注解的区别

2.2 在程序中获取前端传递过来的参数

2.2.1 传递单个参数

2.2.2 传递多个参数

2.2.3 获取对象

2.2.4 获取表单参数

 2.2.4 获取 ajax 传递的普通对象

2.2.5 获取 JSON 对象

2.2.6 上传文件

2.2.7 获取 Cookie

2.2.8 获取 Session

2.2.8 获取 Header

2.2.9 后端参数重命名

2.2.10 获取URL中参数@PathVariable

2.2.11 设置参数必传@RequestParam

2.3 返回数据给前端

 2.3.1 返回静态页面

2.3.2 返回 text/html

 2.3.3 返回 JSON 对象

2.3.4 请求转发和请求重定向【了解】


1. 什么是 Spring MVC

  • Spring MVC就是整个 Spring Framework 中的一个 web 模块
  • 它是基于 Servlet API (HTTP 协议, request, response) 构建的.        

1.1 如何理解 MVC

MVC 的全称为 Model View Controller , 它是一种软件架构模式, 将 web 应用程序分为模型、视图、控制器三部分.

关系图:

1.2 Spring MVC 和 MVC 的关系

Spring MVC 和 MVC 的关系就和 IoC 和 DI 的关系一样, MVC 是一种思想, 而 Spring MVC 是一种具体的实现, 简单来说就是 Spring MVC 实现了 MVC.

2. 如何学习 Spring  MVC

学习 Spring MVC 只学三个东西:

  • 将浏览器和服务器连接起来
  • 在程序中获取前端传递过来的参数
  • 执行了相应业务逻辑后, 把执行结果返回给用户

2.1 将浏览器和服务器连接起来

我们连接用户和 Java 程序之前, 先要创建一个 Spring MVC 项目, 而 SpringMVC 项目就是基于 Spring MVC 项目本身是基于 Spring Boot 项目的 (前面的博客有详细讲解 - 创建 Spring Boot 项目)

此处我们只需要在创建的时候多添加一个 Spring Web 框架即可:

 Spring MVC 项目创建好了之后, 就可以进行编写代码了:

【代码示例】

@Controller  // 加载并注册类
@ResponseBody // 当前类返回的是非静态页面
@RequestMapping("/web") // 使用 "/web" 可以访问到当前类 (可省略)
public class WebController {
    @RequestMapping("/hello") // 使用 "/web" + "/hello" 可以访问到当前方法
    public String hello() {
        return "hello Spring MVC~";
    }
}

当我们写出这样一个代码的时候, 浏览器通过 http://127.0.0.1:8080/web/hello 的时候就可以映射到我们程序中的 hello() 方法.

【注意事项】

2.1.1 @RequestMapping, @GetMapping, @PostMapping 三个注解的区别

前边代码使用的 @RequestMapping 注解, 可以正确访问到本地程序的方法, 且在浏览器通过 url 映射到本地程序本身就是 Get 请求, 那我们来看看 POST 请求是否也能正常访问到程序. 

当你的程序想要只支持 GET 请求或者只支持 POST 请求的时候, 就可以使用 @GetMapping 和 @PostMapping 注解, 这俩注解和 @RequestMapping 是类似的用法, 使用相应的请求类型, 是能够正确映射到本地程序的.

【处理 Get 请求】

// 写法一(都适用)
@RequestMapping("/hello")

// 写法二
@RequestMapping(value="/hello", method=RequestMethod.GET)

// 写法三
@GetMapping("/hello")

【处理 Post 请求】

// 写法一
@RequestMapping(value = "/hello",method = RequestMethod.POST)

// 写法二
@PostMapping("/hello")

2.2 在程序中获取前端传递过来的参数

参数请求的类型无非就三种:

  • URL 传参(人为的)
  • ajax 传参
  • form 表单传参

2.2.1 传递单个参数

第一种获取方式(了解): 

URL 传参 :   http://127.0.0.1:8080/web/hello?name=zhangsan

第二种获取方式:

URL 传参: http://127.0.0.1:8080/web/get1?age=11

2.2.2 传递多个参数

http://127.0.0.1:8080/web/get1/name=zhangsan&age=11

 浏览器访问结果: 

如果前端传递过来的参数不止两三个, 假设有一百个怎么办. 这时候就可以封装成对象来接受了.

2.2.3 获取对象

 使用 postman 传递参数.

2.2.4 获取表单参数

前端代码:

 

 后端代码:

浏览器访问:  http://127.0.0.1:8080/login.html

输入姓名, 密码提交后, 显示运行结果:

 2.2.4 获取 ajax 传递的普通对象

前端通过 ajax 传参:

 后端代码:

>>> 当后端返回 map 类型的时候, Spring MVC 会自动识别键值对格式并帮我们转成 JSON 格式返回给前端.

打开 fiddler 抓包查看 Content-Type:

 >>> 前端传递过来的参数不是 JSON 对象, 只是简单的对象, 抓包查看 Content-Type:

2.2.5 获取 JSON 对象

后端代码: (@RequestBody 神奇注解)

 前端通过 postman 构造参数:

 执行结果:

>>> 此时再抓包查看请求中的 Content-Type:

此时请求的数据类型已经不再是 form-urlencoded, 而是变成了真正的 JSON 格式 的类型了.  body 中的数据格式也随之而变了.

2.2.6 上传文件

后端代码:

 前端通过 postman 构造:

2.2.7 获取 Cookie

【传统方式】Servlet 获取 Cookie

 通过开发者工具构造 Cookie :

浏览器访问: http://127.0.0.1:8080/web/getck

 【Spring MVC 中的方式】@CookieValue

获取一个 Cookie:

 获取多个 Cookie:

2.2.8 获取 Session

在获取 session 之前, 先存储 session:

以前获取 Session 的方式:

 【Spring MVC 的方式】@SessionAttribute

 【玩个花活】

由于 Session 是依赖于 Cookie 的, 如果我们篡改了 SessionId, 浏览器是否还能访问到 ?

此时, 我们在设置 session 的情况下再去获取 session, 就会显示 null 了.

【理解 Cookie 和 Session 机制】

2.2.8 获取 Header

传统的方式就不啰嗦了, 直接演示 Spring MVC 的写法:

 浏览器访问: http://127.0.0.1:8080/web/get_head

2.2.9 后端参数重命名

有时候, 前端传过来的参数, 不符合后端的命名规则时, 这时候就要用到后端参数重命名了.

 浏览器访问: http://127.0.0.1:8080/web/rename?t=2022-12-6%2014:48:21

2.2.10 获取URL中参数@PathVariable

此处讲到的 URL 中传参和普通的 URL 传参还不太一样

  • 普通 URL 传参: http://127.0.0.1:8080/web/hello?username=zhangsan&age=12
  • 特殊的 URL 传参 :  http://127.0.0.1:8080/web/hello/zhangsan/12

>>>为什么会有这样的 URL 传参呢, 其实就是为了提高在搜索引擎中的权重.

 Spring MVC 接收 URL 中参数的代码:

2.2.11 设置参数必传@RequestParam

其实前面讲到过的设置 required 参数就是来控制参数是否必传. 

2.3 返回数据给前端

 2.3.1 返回静态页面

在 static  目录下新建一个 xxx.html 文件:

index.html:

Controller 代码:

2.3.2 返回 text/html

加上 @RestController 注解或者 @Controller + @ResponseBody, 返回String 等基本类型.

 2.3.3 返回 JSON 对象

当我们的返回类型为集合或者对象的时候, Spring MVC 会自动帮我们转成 JSON 格式的对象, 返回给前端.

浏览器访问 URL: http://127.0.0.1:8080/index

使用 fiddler 抓包查看 Content-Type.

2.3.4 请求转发和请求重定向【了解】

  • forward: 请求转发
  • redirect: 请求重定向

【举例说明】请求转发和请求重定向

【区别】forward VS redirect


本篇文章就到这里了, 谢谢观看!! 

举报

相关推荐

0 条评论