一文了解Spring MVC

目录

什么是Spring MVC

什么是MVC 

Spring MVC 和MVC的区别 

怎么学Spring MVC 

Spring MVC的创建和连接

 @RequestMapping注解

获取参数

传递基础数据类型/包装类型(无注解)

 添加@RequestParam注解(使用在方法参数上)

 传递自定义对象

form-data格式中的文件上传 

接收json格式的数据

返回数据

返回网页

 返回json字符串

总结

转发VS重定向 


什么是Spring MVC

官方解释:Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

翻译后即为:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。

 对Servlet有所了解的人应该知道,Servlet是jdk提供的基于java语言进行web开发的一套标准规范(定义了很多api类或接口等等),我们开发的java web项目部署到web服务器上,运行起来本质上,是调用该web服务器的具体实现。以此达到程序基于servlet标准规范来开发,可以无缝运行在任意支持servlet的web服务器中(servlet容器->替我们管理servlet所有实例对象的整个生命周期)。

什么是MVC 

MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。

  • Model(模型):用于请求数据和响应数据的转换。(自动的将请求数据转换为java对象)
  • View(视图):返回给前端的。
  • Controller(控制器):用于处理请求和响应

Spring MVC 和MVC的区别 

MVC 是一种思想,而 Spring MVC 是对 MVC 思想的具体实现。

怎么学Spring MVC 

学习Spring MVC我们只需要掌握以下3个功能:

  1. 连接功能:将浏览器和java程序连接起来
  2. 获取参数的功能:用户访问是时候会带一些参数,在程序中要想办法获取到参数
  3. 输出数据功能:执行了业务逻辑后,要把程序执行的结果返回给用户

Spring MVC的创建和连接

Spring MVC 可以基于 Spring Boot 创建,也就是创建一个 Spring Boot 项目,创建一个UserController类,具体代码如下:

@Controller
@Slf4j
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/login")
    public String login(){
        return "/index.html";
    }

}

访问http://localhost:8080/user/login 就能打印登录的信息了

 @RequestMapping注解

作用:表示服务资源的信息(路径,请求方法,响应类型等等)

可以使用在类和方法上,服务资源路径(类上路径+方法上路径)

@RequestMapping默认是get方式的请求(可以使用postman来测试)

如何使用post方法

获取参数

传递基础数据类型/包装类型(无注解)

在 Spring MVC 中可以直接用方法中的参数来实现传参,比如以下代码:

@Controller
@RequestMapping("/test")
@Slf4j
@ResponseBody
public class TestController {
    @RequestMapping("/simpleType")
    public String SimpleType(String username, String password, Integer age){
        log.debug("username={},password={},age={}",username,password,age);
        return "好好学习";
    }
}

在postman中的执行结果为: 

 

 注意:

如果是基础数据类型,请求数据就必须有这个字段

前端字段的类型,要和后端字段类型一致,否则也会报错

 添加@RequestParam注解(使用在方法参数上)

使用@RequestParam注解,默认表示请求必须包含该字段,也可以配置为选填。

public String SimpleType有注解(@RequestParam String username, 
                                @RequestParam String password, 
                                @RequestParam Integer age){
        log.debug("username={},password={},age={}",username,password,age);
        return "好好学习";
    }

如果没包含就会报错

 设置required=false则表示选填

   @RequestMapping("/requestParam")
    public String SimpleType有注解(@RequestParam String username,
                                @RequestParam(required = false) String password,
                                @RequestParam Integer age){
        log.debug("username={},password={},age={}",username,password,age);
        return "好好学习";
    }

此时password为选填字段 

 传递自定义对象

    @RequestMapping("/object")
    public String 对象(User user){
        log.debug("user={}",user);
        return "好好学习";
    }
public class User {
    private String username;
    private String password;
    Integer age;
}

form-data格式中的文件上传 

 @RequestMapping("/upload1")
    public String 上传文件1(MultipartFile head){
        log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
        return "好好学习";
    }

基于MultipartFile类型:

  1. 无注解
  2. @RequestParam——默认必填
  3. @RequestPart——默认必填 

接收json格式的数据

//接收json格式的数据:@RequestBody
    @RequestMapping("/json")
    public String json(@RequestBody User user){
        log.debug("user对象接收的数据:{}", user);
        return "好好学习";
    }

返回数据

返回网页

在resources路径下创建public或者static包,里面可以写前端代码

 返回json字符串

//    返回json字符串 且方法返回值为Map,List或自定义类型
    @RequestMapping("/response")
    @ResponseBody
    public Object response(){
        HashMap<String,Object> map=new HashMap<>();
        map.put("username","张三");
        return map;
    }

@ResponseBody注解:一般使用在类或者方法上

注意:方法的返回值为List、Map、自定义类型(Object)

使用在类上:表示所有@RequestMapping注解的方法,都默认有@ResponseBody注解

使用在方法上:表时方法的返回值,作为响应内容

总结

@RequestMapping的方法

  1. 方法没有@ResponseBody,返回值就是String,表示返回网页的路径
  2. 方法有@ResponseBody,返回值就是响应正文,一般会返回对象(List,Map,自定义类型)

转发VS重定向 

return 不但可以返回一个视图,还可以实现跳转,跳转的方式有两种:
  • forward 是请求转发
  • redirect:请求重定向

使用对比

@RequestMapping("/login")
    public String login(){
        return "/index.html";
        //转发
//        return "forward:/index.html";
        //重定向
//        return "redirect:/index.html";
    }

转发是服务器帮转的,而重定向是让浏览器重新请求另一个地址

forward和redirect具体区别:

  • 重定向将请求重新定位到资源,先返回一个3XX状态码,再返回200;转发由服务端转发直接返回200.
  • 请求重定向地址发生变化,请求转发地址不发生变化
  • 请求重定向与直接访问新地址一样,不存在原来的外部资源不能访问;请求转发服务器转发,有可能造成原外部资源不能访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值