看这儿!!! 带你了解spring mvc 您所在的位置:网站首页 springboot用来做什么 看这儿!!! 带你了解spring mvc

看这儿!!! 带你了解spring mvc

2023-05-19 23:32| 来源: 网络整理| 查看: 265

目录

1.什么是Spring MVC         

1.1什么是mvc

1.2MVC与Spring MVC 之间的关系

2.spring mvc的重要性

3.Spring mvc项目创建

4.实现spring mvc web开发——用户端返回的请求

4.1@RequestMapping注解

4.2@ResponseBody

4.3@RequestMapping 是 post 还是 get 请求?

4.4显示的标明所使用的方法

4.4.1get请求的三种写法

4.4.2post请求的两种写法

4.5.转发和重定向

4.5.1转发

4.5.2重定向

4.6.自定义返回内容

5.实现spring mvc web开发——服务器接收客户端的请求

5.1.获取参数

5.1.1获取单个参数

5.1.2传递对象

5.1.3表单参数传递/传递多个参数(非对象)

5.1.4后端参数重命名

5.1.5设置参数必传@RequestParam 

​5.1.6@PathVariable注解获取URL中参数

5.2获取请求头 ——Cookie/Session/header

5.2.1获取header

​5.2.2获取Cookie

5.2.3session的存储和获取

1.什么是Spring MVC         

根据官方文档中得到:Spring web mvc ,通常称为Spring mvc,是基于servlet构件的原始web框架,从一开始就包含在spring框架中。

因此我们可以得到的信息为:

spring mvc是web框架spring mvc 是基于servlet api  实现的

然而要理解spring mvc 我们首先要了解mvc是什么

1.1什么是mvc

mvc是Model View Controller的缩写,他是软件工程中一种软件架构模式,他把软件分为模型,视图,控制器三个部分。 

Model:是应用程序中用于处理应用程序数据逻辑部分,通常模型对象负载在数据库中存取数据View:是应用程序中处理数据显示部分,通常视图是依据数据模型创建的Controller:是应用程序中处理用户交互部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据 1.2MVC与Spring MVC 之间的关系

mvc是一种思想,而Spring mvc是对mvc这个思想的实现.总的来说,spring mvc实现了mvc模式,并继承了servlet api的框架。

2.spring mvc的重要性

现在绝大多数的Java项目都是基于spring(或者spring boot)来实现的,而spring 的核心就是spring mvc。也就是说spring mvc是spring框架的核心模块,而spring boot是spring的脚手架,因此我们可以直到市面上绝大多数项目约等于spring mvc项目。这就是我们要学spring mvc 的原因。

我们学习spring mvc掌握三个功能即可:

连接功能:将用户和Java程序连接起来,也就是说用户访问一个url,可以联系到我们的程序获取参数的功能:用户访问的时候通常会获取参数,在程序中要想办法获取参数输出数据的功能:执行业务逻辑之后,要把执行结果返回给用户 3.Spring mvc项目创建

配置我们的服务端口,端口号默认8080,可以显示标明,也可以配置别的端口号。

对于spring mvc的学习实现,我们使用ajax前后端分离的技术,遵循以下几点:

约定好前后端的接口所有的接口都遵循http/https的应用层协议但对于一个接口的时候,通常基于http,并且请求响应的数据格式也要约定要明白前端的代码是运行在客户端浏览器中,后端的代码时运行在服务器上 

4.实现spring mvc web开发——用户端返回的请求 4.1@RequestMapping注解

RequestMapping注解是spring web框架中最常用的注解之一,主要用来注册接口的路由映射的

 路由映射:所谓的路由映射指的是,当用户访问一个 url 时,将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射。

 通俗的来讲,就是@RequestMapping修饰类或者方法,定义请求的路径。完整的访问路径为:类路径 + 方法路径(类路径可以不用指定)

同时我们添加@Controller注解,表示该类是一个Bean,并且执行web请求和响应处理

4.2@ResponseBody

@ResponseBody注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),默认返回是JSON.如果该注解修饰类,表示类中所有的返回值格式都为JSON,修饰方法时,表示该方法返回JSON.

import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @ResponseBody @Controller public class ArticleController { @RequestMapping("/u1") public Object u1(){ Map map = new HashMap(); map.put("a",123); map.put("b",true); map.put("c","abc"); return map; } }

这就是一个简单的 spring mvc 代码,我们就可以通过url获取到具体的内容

通常我们会使用@Controller 和@ResponseBody两个注解来使用,表示返回的为JSON格式并且这个类为执行web的请求和处理,因此,我们有@RestController将这两者的功能结合起来 :@RestController = @Controller + @ResponseBody

4.3@RequestMapping 是 post 还是 get 请求?

我们http协议中最常用的两个方法就是post/get方法,这两个可以涵盖大多数请求应答等的需求,那么我们@RequestMapping 是get还是post方法呢,我们可以使用postMan来测试。

@RequestMapping默认是get方法,不支持post方法

那么我们如何才能接收post请求

4.4显示的标明所使用的方法 4.4.1get请求的三种写法 // 写法1 @RequestMapping("/index") // 写法2 @RequestMapping(value = "/index",method = RequestMethod.GET) // 写法3 @GetMapping("/index") 4.4.2post请求的两种写法 // 写法1 @RequestMapping(value = "/index",method = RequestMethod.POST) // 写法2 @PostMapping("/index") 4.5.转发和重定向 4.5.1转发

我们通常所返回的结果是一个JSON格式,但是其实我们还可以实现其他的非JSON的形式,包括转发和重定向。

package com.example.springmvc_study.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller//要返回重定向,不能设置响应格式 public class RedirectController { //返回值不作为响应体的时候,就只能返回String,表示我们重定向资源路径 //这是转发的代码 @RequestMapping("/f") public String f(){ //这是转发 return "/index.html"; // return "forword:/index.html";两种写法 } }

此时没有重定向,是直接返回页面,这个属于转发,我们可以使用fiddler抓包响应观察:

4.5.2重定向 package com.example.springmvc_study.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller//要返回重定向,不能设置响应格式 public class RedirectController { //返回值不作为响应体的时候,就只能返回String,表示我们重定向资源路径 //重定向 @RequestMapping("/r") public String r(){ return "redirect:/index.html"; } }

 此时页面发生了两次跳转:

此时执行路径为 :http://localhost:8080/r

 第二次跳转页面为:http://localhost:8080/index.html

 此时就完成了重定向。

4.6.自定义返回内容

我们在某些时候返回的不单单是上面的几种类型,需要返回特定的格式,此时我们就可以自定义。spring mvc提供了灵活处理响应的类ResponseEntity,可以手动设置响应状态码,响应格式,响应正文。

package com.example.springmvc_study.controller; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @RestController public class RespAnyController { @RequestMapping("/any") public ResponseEntity any() throws IOException { Path path = new File("C:\\Users\\15047\\Pictures\\Camera Roll\\4.jpg").toPath(); byte[] bytes = Files.readAllBytes(path); return ResponseEntity.ok().header("content-type","application/x-jpg").body(bytes); } }

他的执行结果可以直接保存在本地

5.实现spring mvc web开发——服务器接收客户端的请求 5.1.获取参数 5.1.1获取单个参数

在spring mvc 中,可以直接使用方法中的参数来实现传参:

@RequestMapping("/m1") public Object method_1(String name){ System.out.println("参数 name:"+name); return "/index.html"; }

 

5.1.2传递对象 package com.example.springmvc_study.model; import lombok.Data; @Data public class User { private Integer id; private String username; private Integer age; private Integer weight; } @RequestMapping("/complex") public Object complex(User user){ user.setUsername("张三"); user.setId(1); user.setAge(18); user.setWeight(80); return user; }

5.1.3表单参数传递/传递多个参数(非对象) @RequestMapping("/log") public Object log(String username, Integer age, int weight){ Map map = new HashMap(); map.put("user",username); map.put("age",age); map.put("weight",weight); return map; }

5.1.4后端参数重命名

在特殊情况下,前端所传参数和后端服务器接收可以不一致,比如前端传入time,后端是由createtime来接收,此时参数不一致,那么就不能接收到参数。出现这种问题我们可以使用@RequestParam 来重命名前后端的参数值。

@RequestMapping("/m4") public Object method_4(@RequestParam("time") String createtime) { System.out.println("时间:" + createtime); return "/index.html"; }

5.1.5设置参数必传@RequestParam 

同样使用@RequestParam注解来设置,在方法体写参数时使用@RequestParam 注解修饰,即可完成设置必传参数,如果前端不传入相应的参数或者传入参数不够,那么就会报错。

@RequestMapping("/rp") public Object rp(@RequestParam String username, @RequestParam String email ,@RequestParam Integer age){ Map map = new HashMap(); map.put("username",username); map.put("email",email); map.put("age",age); return map; }

其他情况:

5.1.6@PathVariable注解获取URL中参数 @RequestMapping("/queryStudent/{name}") public Object queryStudent(@PathVariable String name){ Map map = new HashMap(); map.put("name",name); return map; }

5.2获取请求头 ——Cookie/Session/header 5.2.1获取header

作用:使用@RequestHeader注解通过绑定请求头中的字段名,获取请求头的字段信息

这里我们获取请求头中的UA(标识浏览器的版本型号等)。

@RequestMapping("/header") public Object header(@RequestHeader("User-Agent") String userAgent){ Map map = new HashMap(); map.put("User-Agent",userAgent); return map; } 5.2.2获取Cookie

 作用:使用@CookieValue注解通过绑定cookie中的键名,获取cookie中的信息

@RequestMapping("/cookie") public Object cookie(@CookieValue("My-Cookie") String cookie){ Map map = new HashMap(); map.put("My-Cookie",cookie); return map; }

5.2.3session的存储和获取

session是工作在服务器中,例如一个用户登录之后,就会将他的信息等保存下来,然后我们就可以使用@SessionAttribute注解绑定设置session时的键来获取

@RequestMapping("/login") public Object login(HttpServletRequest req){ HttpSession session = req.getSession(); session.setAttribute("user","123456"); Map map = new HashMap(); map.put("user","123456"); return map; } @RequestMapping("/getSession") public Object getSession(@SessionAttribute("user") String user){ Map map = new HashMap(); map.put("session中User",user); return map; }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有