一、Spring MVC概述
Spring MVC是基于Servlet和MVC设计模式下实现的web项目,同时也是Spring框架中的web模块,Spring MVC是随着Spring产生而存在的一个框架。
那么什么又是MVC设计模式?
MVC的设计模式包含三层:Model、View以及Controller(模型、视图和控制器),如下为三者的关系图:
Spring MVC与MVC的区别就是MVC是设计思想,而Spring MVC是针对该思想进行的实现。
在idea中创建一个Spring MVC的项目的步骤如下:
1、点击新建一个项目:
2、选择版本号和添加相关依赖
点击Finish后项目创建完成。
二、实现用户和程序映射
使用@RequestMapping注解
通过使用@RequestMapping注解设置路由地址的方式来实现映射。
@RequestMapping("/hello") public String hello(){ return "Hello!"; }
在浏览器通过url访问一般都是GET方法,但@RequestMapping注解同样支持POST方法。
指定方法的形式,使用method属性进行指定方法,value来设置路由地址:
@RequestMapping(method = RequestMethod.GET,value = "/hello")
并且@RequestMapping注解不仅可以修饰方法也能修饰类,在类之前添加的@RequestMapping注解通常可以省略。
使用@PostMapping注解
使用@PostMapping("/xx")注解来设置路由地址来实现映射,但是该注解只支持POST方法。
使用@ GetMapping注解
使用@GetMapping("/xx")注解通过设置路由地址实现映射,但只支持GET方法。
@GetMapping("/hi") public String hi(){ return "Hi World!"; }
三、获取用户的请求参数
传递单个参数
可以传递单个参数来实现,此处传递的参数名一定要和前端保持一致,例如想获取User对象就可以通过传id来进行获取信息:
@RequestMapping("/getuser") public User getUser(Integer id){ User user = new User(); user.setId(id); user.setName("小风"); user.setAge(18); return user; }
通过fiddler抓包工具可以发现此处响应的是json格式,不用像使用Servlet那样需要设置返回格式,而是会根据获取的数据类型自动选择。
传递多个参数
传递多个参数来获取信息:
@RequestMapping("/login") public String login(String name,String password){ return "user:"+name+",password:"+password; }
此处的参数如果和前端命名不一致,但项目已经完成,全部重命名不方便时就可以使用@RequestParam("xx")注解来设置与前端一致的命名,但是这也有缺陷,如果传入参数为空就会报错,所以就需要再给该注解的required属性设置为false。
@RequestMapping("/login") public String login(@RequestParam(value = "user",required = false) String name, String password){ return "user:"+name+",password:"+password; }
传递一个对象
可以直接传递一个对象,并且 Spring MVC 可以⾃动实现参数对象的赋值。
@RequestMapping("/getinfo") public String getUserInfo(User user){ return "用户:"+user; }
接收Json格式的数据
服务器端实现Json格式的数据接收就需要使用@RequestBody注解。
通过postman模拟实现如下:
URL地址中获取参数
上述获取对象的方法是从URL中的请求字符串来获取参数对象,但这样优先级较低,还有一种方法就直接是在url地址中获取参数,但是需要使用@PathVariable注解,并且在@ResponseMapping注解中也要利用{}加上参数,参数之间使用“/”分割。
@RequestMapping("/user/{name}/{age}") public String getInfo(@PathVariable String name,@PathVariable Integer age){ return "姓名:"+name+",年龄:"+age; }
上传文件
在上传文件时应该使用@RequestPart注解,其中@RequestPart中传入的参数是前端代码的文件名,为了避免上传文件的文件名重读就使用UUID来产生全球唯一的字符串进行命名,并且上传的文件的路径写在配置文件中,在不同的环境下使用不同的配置文件,但是配置文件都需以application开头,如下文件分别代表了开发环境下的配置文件信息以及生产环境下的配置文件信息:
然后在主配置文件中指明当前用的那个配置文件:
spring.profiles.active=dev
@RequestMapping("/file") public boolean getFile(Integer id, @RequestPart("file")MultipartFile file){ boolean result = false; String fileName = file.getOriginalFilename(); fileName = fileName.substring(fileName.lastIndexOf(".")); fileName = UUID.randomUUID()+fileName; try { //保存文件到本地 file.transferTo(new File(impath+fileName)); result = true; } catch (IOException e) { log.error("上传文件失败:"+e.getMessage()); } return result; }
使用postman进行模拟上传:
在本地文件中可以看到上传的文件:
利用Spring MVC开发程序2:https://developer.aliyun.com/article/1521797?spm=a2c6h.13148508.setting.20.55b44f0eiXO8eW