【springMVC篇1】初识springMVC

news/2024/11/14 13:44:51/

目录

一、什么是springMVC

1.1springMVC定义:

模型(Model)

视图(View) 

第一大类:服务器端的视图

第二大类:客户端的视图

springMVC的工作流程 

1.2 MVC和springMVC之间的关系

二、学习SpringMVC的目标

2.1实现用户和程序之间的映射

     使用@RequestMapping注解

关于方法的返回值

@RequestMapping注解的参数

2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

第二种:传递多个参数的情况(本质上和单个一样的)

第三种方式:获取一个对象

第四种方式:JSON格式传递对象

第五种方式:后端参数的重命名@RequestParam

@RequestParam的required属性

第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)


一、什么是springMVC

SpringMVC是一个web框架,这个框架是基于MVC思想Servlet的API实现的一个Web框架。


1.1springMVC定义:

MVC是Model View Controller的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为:

模型(Model)视图(View)控制器(Controller)三个部分。


模型(Model)

       是应用程序当中用于处理应用数据逻辑的部分。通常情况下,模型对象用于负责在数据库当中存储数据。


视图(View) 

是应用程序当中处理数据显示的部分,通常视图是依据模型数据创建的。

视图分为两大类:

第一大类:服务器端的视图

运行在服务器端的视图:负责解析数据和模板


第二大类:客户端的视图

运行在客户端的视图:负责展示实际的前端页面


springMVC的工作流程 


1.2 MVC和springMVC之间的关系

     MVC是一种软件设计的思想,而springMVC是MVC思想的具体实现

     同时SpringMVC又是Spring框架当中的一个Web模块,它是随着Spring的诞生而存在的一个框架。


二、学习SpringMVC的目标

有下面的三个步骤:

步骤1:实现用户和程序的映射(在浏览器输入URL地址之后,能够在程序当中匹配到相应的方法);

步骤2:服务器端要得到用户请求的参数

步骤3:服务器端要把结果返回给用户

下面,将分别介绍这三个步骤的具体实现: 


2.1实现用户和程序之间的映射

     使用@RequestMapping注解

      这个注解可以作用于类上面,也可以作用于方法上面,但是一定要作用在方法上面。

       当这个注解作用在类(Controller)上面的时候,意味着:当访问这一个类下面的所有方法的时候,请求的一级路径就是@RequestMappping(路径)。

       二级路径:就是作用在方法上面的路径。


关于方法的返回值

  当这一个方法

  没有被@ResponseBody注解作用的时候:那么返回值将会是一个待跳转的页面。

  如果被@ResponseBody注解作用的时候:那么返回值就是往页面回写的数据(相当于response.getWriter().write())

@RequestMapping注解的参数

@RequestMapping(method = RequestMethod.POST,value = "/get2")

 method参数:可以指定是get,还是post,还是delete等等方法。

 value参数:指的是访问的路径。

但是这个方法是一个枚举类型。 

        除了@RequestMapping以外,还可以使用@GetMapping@PostMapping@DeleteMapping等等的注解来处理请求。分别是:Get请求Post请求delete请求等等。


2.2获取用户请求的参数

第一种:用户只传递一个参数的情况

    /*** 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数* 用户的id@param id* user对象@return*/@RequestMapping("/getUserById")@ResponseBodypublic User getUserById(Integer id){User user=new User();user.setAge(18);user.setId(id);user.setPassword("123");return user;}

测试: 

       需要注意的是:括号内的参数一定要和前端传递的参数名称一致。如上图:"?"后面的id需要和方法当中的参数名称保持一致


第二种:传递多个参数的情况(本质上和单个一样的)

 /*** 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数* 用户的id@param id* user对象@return*/@RequestMapping("/getUserById")@ResponseBodypublic User getUserById(Integer id,String password){User user=new User();user.setAge(18);user.setId(id);user.setPassword(password);return user;}

       前端传递参数的时候,需要使用queryString的方式进行传参。 因此获取1个参数和多个参数的格式是一致的。


第三种方式:获取一个对象

       当queryString特别多的时候,那么这样代码的可读性、可维护性就变得非常差。因此,可以考虑使用对象来接受。

/*** 用户注册* 用户实体@param user* 注册成功的提示@return*/@RequestMapping("/register")@ResponseBodypublic String register(User user){return "用户注册成功:"+user;}

 然后,前端提交信息的时候,只需要指定user的各个属性即可。

以上的几种方式,支持使用URL进行传递,也支持使用form表单进行实体提交。


第四种方式:JSON格式传递对象

       在上面,我们演示了以queryString的格式来传递一个对象,下面,将演示以json的格式传递user对象。

       需要在参数User前面加一个注解:@RequestBody

       当使用这一个注解修饰参数的时候,那么这个参数将会被以json的格式进行提交。

/*** 用户注册* 用户实体@param user* 注册成功的提示@return*/@RequestMapping("/register")@ResponseBodypublic String register(@RequestBody User user){System.out.println(user);return "用户注册成功:"+user;}

 运行结果:

       @RequestBody当中也有一个参数是required,默认是true,前端必须要提交user对象,否则报400

       如果把这个参数设置为false,那么前端就不一定需要提交user对象 


第五种方式:后端参数的重命名@RequestParam

使用@RequestParam注解,当中指定的名称就是前端传递的参数

    /*** 用户提交的时候,只需要提交一个参数,也就是?后面跟着这一个参数* 用户的id@param id* user对象@return*/@RequestMapping("/getUserById")@ResponseBodypublic User getUserById(@RequestParam("userId")Integer id, String password){User user=new User();user.setAge(18);user.setId(id);user.setPassword(password);return user;}

这种情况,用于前后端出现了差异的时候,后端为了改变参数列表的名称,改用的一种方式:


@RequestParam的required属性

@RequestMapping("/getUserById")@ResponseBodypublic User getUserById(@RequestParam(value = "userId",required = false)Integer id, String password){User user=new User();user.setAge(18);user.setId(id);user.setPassword(password);return user;}

       如果使用@RequestParam注解的时候,不指定required参数,那么默认就是true,也就意味着前端一定要传递一个名称为"userId"的参数,否则就会报错。

       只有改成了false,才不会令userId这个参数设置为"必传"的。


第六种方式:从URL地址栏当中获取参数(不是URL的查询字符串)

第一步:需要在@RequestMapping当中使用{}来指定参数;

第二步:需要在方法当中使用@PathVariable来修饰参数。

代码实现:

    @RequestMapping("/url/{username}/{password}")@ResponseBodypublic User getFromUrl(@PathVariable String username,@PathVariable String password){User user=new User();user.setUserName(username);user.setPassword(password);return user;}

运行结果: 


http://www.ppmy.cn/news/39356.html

相关文章

【python 定时任务】Python apscheduler 定时调度框架

在开发 Python 应用程序时,我们常常需要编写定时任务。例如,我们可能需要每天自动发送一份报告、每小时清理一次临时文件等。为了实现这些功能,我们可以使用 Python 的 apscheduler 模块。 安装 apscheduler 要使用 apscheduler,你需要先安装它。你可以使用 pip 命令来安装…

集成华为运动健康服务干货总览

在接入华为运动健康服务的过程中你是否遇到过权限申请有困难、功能不会用的情况? 本期超强精华帖,一帖汇总集成华为运动健康服务你可能需要的各类干货,还不赶紧收藏起来!开发有困难,随时可查阅~ 如果你有感兴趣或想进一步了解的…

Adobe:当创意工作遇上AIGC ,人工智能还是取代了设计师?

近期以来,GPT-4热度居高不下,国内首部AI深度参与的动画电影也有望诞生,这也使得传媒影视板块反复活跃表现,影视业内资深设计师也表示,AI技术可以应用在剧本创作、刻画人物画像,甚至实现AI换脸等&#xff0c…

关于镜头畸变问题的总结

1、问题背景最近在做的项目有畸变校正的需求,但测试镜头畸变时,发现畸变的形态不太正常。如下图所示中间向内凹、四周向外凸,感觉像是曲线型的。但常见的畸变就两种,一种是向内收的枕形畸变,另一种是向外凸的桶形畸变&…

O2O、C2C、B2B、B2C是什么意思

一.O2O、C2C、B2B、B2C的区别在哪里? o2o 是 online to offline 分为四种运营模式 1.online to offline 是线上交易到线下消费体验 2.offline to online 是线下营销到线上交易 3.offline to online to offline 是线下营销到线上交易再到线下消费体验 4.online …

代理服务器与CDN的概念

代理服务器 特点:本身不产生内容,处于中间位置转发上下游的请求和响应 面向下游的客户端:它是服务器面向上游的服务器:它是客户端 正向代理:代理的对象是客户端 隐藏客户端身份绕过防火墙(突破访问限制&am…

Thinkphp 6.0模版的比较和定义标签

本节课我们来学习一下模版标签中比较标签和定义标签的用法; 一.比较标签 1. {eq}..{/eq}标签,比较两个值是否相同,相同即输出包含内容; {eq namename valueMr.Lee} 李先生 {/eq} 2. 属性 name 里是一个变量&#xff0…

Flink (五) --------- DataStream API

目录一、执行环境(Execution Environment)1. 创建执行环境2. 执行模式(Execution Mode)3. 触发程序执行二、源算子(Source)1. 准备工作2. 从集合中读取数据3. 从文件读取数据4. 从 Socket 读取数据5. 从 Kafka 读取数据6. 自定义 …