admin管理员组文章数量:1794759
【Java】Spring MVC程序开发
文章目录
- Spring MVC程序开发
- 1. 什么是Spring MVC?
- 1.1 MVC定义
- 1.2 MVC 和 Spring MVC 的关系
- 2. 为什么学习Spring MVC?
- 3. 怎么学习Spring MVC?
- 3.1 Spring MVC的创建和连接
- 3.1.1 创建Spring MVC项目
- 3.1.2 @RequestMapping 注解介绍
- 3.1.3 @RequestMapping是post 还是 get请求?
- 3.1.4 @GetMapping 和 @PostMapping
- 3.2 获取参数
- 3.2.1 传递单个参数
- 3.2.2 传递对象
- 3.2.3 表单参数传递/传递多个参数
- 3.2.4 后端参数重命名
- 3.2.5 设置参数必传
- 3.2.6 @RequestBody接收JSON对象
- 3.2.7 获取URL当中的参数@PathVarible
- 3.2.8 上传文件@RequestPart
- 3.2.9 获取Cookie/Session/header
- 3.3 返回数据
- 3.3.1 返回静态页面
- 3.3.2 请求转发和请求重定向
- 3.3.3 @ResponseBody说明
Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称是“Spring Web MVC”来自其原模块的名称,但是它通常被称为“Spring MVC”
从上述定义我们可以看到两个信:
然而要真正的搞懂Spring MVC?我们要先理解什么是MVC?
1.1 MVC定义MVC是Model、View、Controller的缩写,它是软件工程当中的一种软甲架构模式,它把软件系统分为模型、视图、和控制器三个基本部分
- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
- View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的
- Controller(控制器)是应用程序处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
MVC是一种思想,而Spring MVC是对MVC思想的具体实现
总结来说,Spring MVC是实现了一个MVC模式,并继承了Servlet API的Web框架。既然是Web框架,那么用户在浏览器当中输入URL之后,我们的Spring MVC项目就可以感知到用户的请求
2. 为什么学习Spring MVC?现在绝大部分的Java项目都是基于Spring或者是(Spring Boot)的,而Spring的核心是Spring MVC也就是说Spring MVC是Spring框架的一个核心模块,而Spring Boot是Spring的脚手架。因此我们可以推断出,现在市面上的绝大部分Java项目约等于Spring MVC项目,这就是学习它的原因
在创建Spring Boot项目的时候,我们勾选的Spring Web框架其实就是Spring MVC框架,
简单来说,咱是所以要学习Spring MVC是因为它是一切项目的基础,我们以后创建的Spring、Spring Boot项目都是基于Spring MVC的
3. 怎么学习Spring MVC?学习Spring MVC我们只需要掌握3个功能:
Spring MVC项目创建和Spring Boot项目创建相同(Spring MVC 和Spring Boot的方式相同)在创建的时候选择Spring Web就相当于创建了Spring MVC项目
在Spring MVC当中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用
3.1.1 创建Spring MVC项目创建Spring Boot项目的时候勾选上Spring Web模块即可
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("sayhi") @ResponseBody public String sayHi() { return "你好 世界"; } }实现之后访问地址:localhost:8080/user/sayhi就可以访问了
3.1.2 @RequestMapping 注解介绍@RequestMapping是Spring Web应用程序当中最常被用的注解之一,它是用来注册接口的路由映射的
路由映射:所谓的路由映射指的是,当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫做路由映射
@RequestMapping的基础使用
package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/user") public class UserController { @RequestMapping("sayhi") @ResponseBody public String sayHi() { return "你好 世界"; } @ResponseBody @RequestMapping(method = RequestMethod.POST, value = "/sayhi2") public String sayHi2() { return "你好,世界"; } }@RequestMapping既可以就是类,也可以修饰方法,当修饰类和方法的时候,访问的地址是类 + 方法
3.1.3 @RequestMapping是post 还是 get请求?经过测试之后,我们可以发现是都可以支持的
我们可以指定方法类型
3.1.4 @GetMapping 和 @PostMapping三种实现方式:
@RequestMapping("sayhi") @ResponseBody public String sayHi() { return "你好 世界"; } @ResponseBody @RequestMapping(method = RequestMethod.POST, value = "/sayhi2") public String sayHi2() { return "你好,世界"; } @ResponseBody @PostMapping("/sayhi3") public String sayHi3() { return "你好,世界3 "; } 3.2 获取参数 3.2.1 传递单个参数在Spring MVC中可以直接用方法中的参数来实现传参,比如以下代码
@ResponseBody @RequestMapping("/getuserinfoid") public UserInfo getUserInfoId(Integer id) { UserInfo userInfo = new UserInfo(); userInfo.setId(id); userInfo.setName("张三"); userInfo.setAge(18); userInfo.setPassword("1234"); return userInfo; }访问的结果是:
3.2.2 传递对象Spring MVC可以自动实现参数对象的赋值
@ResponseBody @RequestMapping("/reg") public UserInfo reg(UserInfo userInfo) { return userInfo; } 3.2.3 表单参数传递/传递多个参数 @ResponseBody @RequestMapping("/login") public String login(String name, String password) { return "name: " + name + "password: " + password; } 3.2.4 后端参数重命名某些情况下,前端传递的参数key和后端接收的key可以不一致
@ResponseBody @RequestMapping("/login") public String login(@RequestParam(name = "username")String name, String password) { return "name: " + name + "password: " + password; } 3.2.5 设置参数必传默认情况下,是必须要传递的,
我们可以设置成非必传参数
如果我们的实际业务前端的参数是一个非必传参数,我们可以这样操作
3.2.6 @RequestBody接收JSON对象如果没有加上这一个注解,就会接收不到
3.2.7 获取URL当中的参数@PathVarible代码实现:
@RequestMapping("/hero/{id}/{name}") public String getHeroInfo(@PathVariable String id, @PathVariable String name) { return "id" + id + "name" + name; }地址填写方法:
3.2.8 上传文件@RequestPart @RequestMapping("/upimg") public boolean upImg(Integer uid, @RequestPart("img") MultipartFile file) { boolean result = false; String fileName = file.getOriginalFilename();// 得到图片名字 fileName = fileName.substring(fileName.lastIndexOf(".")); // 得到后缀 fileName = UUID.randomUUID().toString() + fileName; try { file.transferTo(new File ("D://")); result = true; } catch (IOException e) { e.printStackTrace(); log.error("上传错误" + e.getMessage()); } return result; } 3.2.9 获取Cookie/Session/header获取cookie:
@ResponseBody @RequestMapping("/cookie") public String getCookie(@CookieValue("bit") String bite) { return bite; }获取header:
使用注解:@RequestHeader
Session的存储和获取:
Session的存储我们只能使用传统的方式,但是Session的获取我们可以使用注解完成@SessionAttribute
3.3 返回数据 3.3.1 返回静态页面这时候如果要返回一个“hello.html”,这时候返回的是一个同名的页面。所以我们在使用的时候都要加上一个注解ResponseBody
这里我们设置一个实用的技巧:热部署
3.3.2 请求转发和请求重定向
forward VS redirect
return 不但可以返回一个视图,还可以实现跳转,跳转的方式有两种:
- forward 是请求转发
- redirect 请求重定向
“转发”和“重定向”的理解:在中国官方发布的内容越少事情越大,“转发”和“重定向“也是一样:字越少,责任越大。转发是服务器帮忙转发的,而重定向是让浏览器重新请求另一个地址
具体区别如下:
@ResponseBody返回的值如果是字符会变成text/html,如果是对象会转成appllcation/json返回给前端
@ResponseBody可以用来修饰方法或者修饰类,修饰类表示类中的所有方法都会返回html或者JSON而不是视图
版权声明:本文标题:【Java】Spring MVC程序开发 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686618963a86966.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论