SpringMVC程序开发

这篇具有很好参考价值的文章主要介绍了SpringMVC程序开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.认识SpringMVC

MVC的定义

MVC和SpringMVC的关系

2.创建SpringMVC项目

1.@RequestMapping实现连接

2. @POSTMapping注解实现连接

3.@GETMapping实现连接

3.获取参数

1.获取单个参数

2.获取多个参数

3.获取普通对象

4.获取json对象

5.特殊场景

6.获取URL?前的参数

7.获取上传的文件@RequestPart

8.获取Cookie/Session/header

4.返回数据

1.返回静态页面

2.返回text/html数据

3.返回JSON对象

4.跳转

1.forward,请求转发

2.redirect,请求重定向

3.请求重定向和请求转发的区别

5.热部署


1.认识SpringMVC

Spring MVC 是一个功能强大、高效、可靠的 Web 框架

Spring MVC 是 Spring Framework 的一个模块,也叫做 Web MVC 框架,它是基于 Java Servlet 和 JavaServer Pages (JSP) 技术的 Web 应用程序开发框架。

Spring MVC 是一种轻量级、灵活、可扩展的 Web 框架,具有以下主要优点:

  1. 简单易用:Spring MVC 采用约定优于配置的方式,可以快速地创建 Web 应用程序并进行开发和测试。
  2. 高度可定制化:Spring MVC 提供了许多可定制化的选项,例如,可以使用不同的视图技术、后端数据源和验证器等,以满足各种不同的应用程序需求。
  3. 易于集成:Spring MVC 可以与许多其他 Spring 模块无缝集成,例如,Spring Security、Spring Boot 等。
  4. 容易进行测试:Spring MVC 采用了模型-视图-控制器 (MVC) 架构,这种设计模式使其易于编写自动化测试。

MVC的定义

MVC是Model View Controller的缩写,是软件工程中的一种软件架构模式(是一种设计模式),理念:将软件系统分为模型,控制器,视图三个部分

SpringMVC程序开发

1.User发送HTTP请求,来到控制器,进行安全校验,控制用户输入等操作后发送给Model

2.Model是数据模型,通常负责在数据库中存取数据,将响应信息返回到控制器

3.控制器返回数据到视图进行渲染,结果呈现给User

MVC和SpringMVC的关系

和IoC和DI相同,MVC是一种思想,SpringMVC是具体的实现,并继承了Servlet API的Web框架

SpringMVCd的重要性:现在多数的Java项目都是基于Spring/SpringBoot,SpringMVC是Spring的核心模块,所以Java项目约等于SpringMVC项目

2.创建SpringMVC项目

SpringMVC的建立和创建连接

使用SpringBoot来创建SpringMVC项目

SpringMVC程序开发

SpringMVC程序开发 SpringMVC程序开发

点击Maven框架支持,导入依赖

SpringMVC程序开发

 实现连接

SpringMVC程序开发

这里的路由/hello,可以是多级路由.访问时必须写全路由名称,否则不能访问

启动项目 

SpringMVC程序开发

这样就实现了连接

建立连接条件:

1.@RestController注解,将类注册到Spring容器中

2.@RequestMapping注解,路由映射

1.@RequestMapping实现连接

@RequestMapping支持的方法

1.支持GET请求

我们是通过URL的方式访问的,所以肯定是支持GET方法的

通过开发者工具也可以查看到

SpringMVC程序开发

 2.POST请求

SpringMVC程序开发

我们通过Apifox模拟POST请求,也是可以的

所以@RequsetMapping也支持POST方法

@RequsetMapping既支持GET请求,也支持POST请求.其它的方法也支持

 源码中关于请求方法的部分:

SpringMVC程序开发

使用注解的时候,也可以进行方法的设置,添加方法参数后,会自动给路由信息添加value.默认只有一个参数时,是缺省的,多个参数就会逐个表明

SpringMVC程序开发

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

设置为POST后进行访问,此时通过URL的GET方法是不被允许的 

状态码:405,方法不被允许!

SpringMVC程序开发

2. @POSTMapping注解实现连接

SpringMVC程序开发

SpringMVC程序开发换成GET是不支持的,更加简洁了 

@POSTMapping注解可以指定多个属性

SpringMVC程序开发

后两个属性:consumes,produces

  • consumes属性允许指定接受请求正文时使用的MIME类型。例如,@PostMapping(value="/example", consumes="application/json")将仅匹配Content-Type为application/json的POST请求

  • produces属性允许指定方法返回的MIME类型。例如,@PostMapping(value="/example", produces="application/json")将指示处理程序方法返回application/json数据

MIME(Multipurpose Internet Mail Extensions)是一种互联网标准,用于表示各种类型的数据。它在电子邮件中广泛使用,也被HTTP和其他应用程序协议采用。 MIME类型通常由两部分组成:主类型和子类型,用斜杠分隔开来,例如"text/html"或"image/jpeg"。每个MIME类型都与一个特定的文件格式相关联,并指定如何处理该格式的数据。客户端和服务器可以使用MIME类型来确定如何正确地解释和显示传输的数据。 

3.@GETMapping实现连接

SpringMVC程序开发

SpringMVC程序开发

不支持POST方式 

总结:

@RequsetMapping既支持GET请求,也支持POST请求.其它的方法也支持

@POSTMapping支持POST请求

@GETMapping支持GET请求

3.获取参数

建立连接之后,学习如何获取参数

1.获取单个参数

SpringMVC程序开发

URL中没有传参数,默认值就是null

SpringMVC程序开发

 传参后

SpringMVC程序开发

SpringMVC程序开发

一个是包装类,一个是基础数据类型.不传参的访问的结果

SpringMVC程序开发

SpringMVC程序开发

结论:

一个对象没设值的时候,值就为null

SpringMVC程序开发

基础数据类型,没有值就会报错.

Java中的原始数据类型(如int、double等)是不能为null的,因为它们是基本类型而非对象

        在Java中,如果将一个可能为null的值传递给基本数据类型的参数会导致编译错误。因为基本数据类型不能为null,因此在尝试访问具有null值的变量时会引发NullPointerException异常。为了避免这种情况,可以使用对应的包装类来替代基本数据类型,因为包装类的实例可以为null。如果需要进行算术运算等操作,可以使用包装类的valueOf()方法将其转换为基本数据类型

SpringMVC程序开发

SpringMVC程序开发

 这里和获取Servlet参数的方式相同,证明了:
Servlet 是 Java Web 开发中的一个核心组件,它负责接收 HTTP 请求并返回 HTTP 响应。Spring MVC 则是基于 Servlet API 构建的 Web 框架,它提供了一种方便的方式来处理和响应 HTTP 请求

SpringMVC程序开发

这两个对象都可以进行使用,这里会直接重定向到sougou

2.获取多个参数

直接加参数,并且参数的顺序不重要,URL中的K-V对应上就能成功传参

SpringMVC程序开发 SpringMVC程序开发

输出结果是正确的,URL中传参顺序不影响输出结果,影响结果的是KV是否对应

3.获取普通对象

SpringMVC程序开发

SpringMVC程序开发

框架实现了自动的参数映射

SpringMVC程序开发

SpringMVC程序开发

SpringMVC程序开发

SpringMVC程序开发

SpringMVC程序开发

结论:

在Spring MVC中,可以将返回值类型声明为Object类型,Spring MVC会根据请求的Accept头信息和处理方法上的@RequestMapping注解来自动匹配合适的数据类型返回码。

例如,如果请求的Accept头信息为application/json,并且处理方法使用了@ResponseBody注解,那么Spring MVC会自动将返回值转换为JSON格式,并设置返回码为200。

同样的,如果请求的Accept头信息为application/xml,并且处理方法使用了@ResponseBody注解,则Spring MVC会自动将返回值转换为XML格式,并设置返回码为200。

如果返回值类型不能被自动转换成JSON或XML格式,Spring MVC会尝试使用其他方式进行转换或者直接返回错误码。因此,在使用Object作为返回值类型时,需要确保返回值能够被正确地转换成支持的格式,以避免出现返回值无法序列化的问题。

4.获取json对象

前端传递参数使用apifox模拟

SpringMVC程序开发

返回结果:

SpringMVC程序开发

SpringMVC程序开发

可以看到,是获取不到json对象的

要拿到json对象,必须加注解@RequestBody

在Spring MVC中,可以使用@RequestBody注解来获取JSON格式的请求参数。当我们在Controller方法的入参上加上@RequestBody注解时,Spring MVC就会自动将请求体中的JSON字符串转换为对应的Java对象,并将其绑定到该入参上

SpringMVC程序开发

@RequestBody注解作用于PoeopleComponent类型的入参上,表明当前请求参数是一个JSON对象,并将它转换为PoeopleComponent对象。这样我们就可以方便地获取JSON格式的请求参数了。需要注意的是,前端发送请求时需要设置请求头的Content-Type为application/json,使用spifox模式时已经设置过格式为json了

再次发送json对象数据

SpringMVC程序开发

SpringMVC程序开发

获取参数成功

5.特殊场景

当前端传递一个和后端名称不同的参数时,可以使用重命名方式接收前端传参

SpringMVC程序开发

重命名之后依然能接收到参数

SpringMVC程序开发

注意:此时传参不能为空,必须传参数.看源码:

SpringMVC程序开发

默认是true..要求必须传参!

SpringMVC程序开发

要解决@RequestParam注解缺少参数值的问题,可以使用以下方法之一:

  1. 提供必要的请求参数。在请求中提供所需参数的值,确保与@RequestParam注解的方法参数匹配

  2. 使用defaultValue属性。通过为@RequestParam注解的defaultValue属性设置值来指定默认值,如果请求中没有传递该参数,则使用默认值

  3. 将@RequestParam注解的required属性设置为false。该属性用于指示请求参数是否是必需的。将其设置为false可以使参数变为可选,并允许请求不提供该参数,而不会抛出错误。当请求未提供该参数时,方法参数将被赋予null值

6.获取URL?前的参数

从基础的URL中获取参数..注意,不是从URL参数部分获取参数

需要在参数前添加注解@PathVariable,否侧获取不到前端的URL参数

SpringMVC程序开发

SpringMVC程序开发

还要注意:当URL基础部分和形参名称不同时,要设置参数非必须才不会报错.仍不会获得该参数

SpringMVC程序开发

SpringMVC程序开发

通过在注解中设置参数就能解决

SpringMVC程序开发

总结:

@PathVariable获取URL?之前的参数(适用参数比较少,更简洁)

@RequestParam获取URL?之后的参数(参数多,灵活)

  /user/12345/user?id=12345 这两种传参方式都可以实现将参数传递到URL中的效果,不过它们的实现方式是有所不同的。

        其中,/user/12345 是一种 RESTful API 的实现方式,它代表了用户资源在服务器端的地址,其中 12345 表示了该用户资源的唯一标识符。这种方式通常用于请求某个特定的资源,可以根据请求的 URL 直接获取该用户的相关信息。

        而 /user?id=12345 则是通过查询字符串的方式将参数传递到URL中,其中 id 表示参数名, 12345 是对应的参数值。这种方式则更加灵活,可以传递多个参数,也可以只传递部分参数,比如 /user?id=12345&name=John&age=25

总体来说,使用 /user/12345 的方式更为直观和简洁,语义明确,而且更符合 RESTful API 设计的规范。而使用 /user?id=12345 的方式则更加灵活,可以传递多个参数,且易于获取参数值。根据具体的需求和场景选择不同的方式来传递参数即可。

7.获取上传的文件@RequestPart

SpringMVC程序开发

上传文件的路径需要根据实际情况进行指定,具体格式可以采用以下两种方式:

  1. 绝对路径:指从磁盘根目录开始的完整路径。例如:/var/www/html/uploads/image.jpg

  2. 相对路径:指相对于当前文件所在目录的相对路径。例如:../../uploads/image.jpg

启动,前端进行模拟数据

SpringMVC程序开发

报错信息:图片大小超出最大上传限制 

SpringMVC程序开发 重新上传小点的图片,上传成功

 SpringMVC程序开发

 另一种解决方案:

SpringMVC中单次上传文件的大小最大默认为1MB。但是,我们可以通过在Spring MVC配置文件中进行修改来调整最大上传文件大小。具体的修改方法如下:

1.打开 application.yml 配置文件。

2.添加以下配置:

spring:
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 100MB

SpringMVC程序开发

我们上传这个文件到demo6

SpringMVC程序开发

需要注意,路径不修改,会将上次上传的图片覆盖

SpringMVC程序开发

解决覆盖问题:

上传的图片文件类型也是很多的,需要获取文件后缀名

然后使用UUID加上后缀名,就能解决覆盖问题

        UUID(Universally Unique Identifier)是通用唯一识别码的缩写,也可以称为 GUID(Global Unique Identifier)。它是一个标准化的格式,用于表示一个128位的值,可以用于唯一地标识某个实体或对象

        UUID 的生成算法是根据某些特定的标准或随机数来计算得出的,保证了生成的 UUID 具有全局唯一性。具体的生成方式包括时间戳、硬件地址、随机数等。而且,UUID 是不可变的,一旦生成,就不可以改变。

SpringMVC程序开发

启动后上传图片,不会覆盖原来的图片

上传了三个相同的文件,都不会被覆盖

SpringMVC程序开发

代码:

@RequestMapping("/getFile")
    public Object getFile(@RequestPart("myimg")MultipartFile file) throws IOException {
        String fileName = UUID.randomUUID() +//文件名
                file.getOriginalFilename().//文件后缀
                        substring(file.getOriginalFilename().lastIndexOf("."));
        File file1 = new File("D:\\projets\\demo6\\"+fileName);
        try{
            file.transferTo(file1);
            return true;
        }
        catch (IOException e){
            e.printStackTrace();
        }
        return false;
    }

8.获取Cookie/Session/header

获取Request和Response对象

SpringMVC程序开发

SpringMVC程序开发

 注解获取Cookie-@CookieValue

SpringMVC程序开发

SpringMVC程序开发

设置非必需后

SpringMVC程序开发

不会报错了

这时伪造一个Cookie

 SpringMVC程序开发

 再次访问

SpringMVC程序开发

获取header-@RequestHeader

SpringMVC程序开发

 结果

SpringMVC程序开发

 9.存储session和获取session

存储不能用注解实现,还是在servlet中的获取方式

SpringMVC程序开发

SpringMVC程序开发

获取-@SessionAttribute

SpringMVC程序开发

 SpringMVC程序开发

4.返回数据

1.返回静态页面

SpringMVC程序开发

 SpringMVC程序开发

return "index.html"没有加/,是在test目录下寻找index.html页面,是访问不到的.因为index.html页面是放在根目录下的,加了/,就会在根路径下寻找index.html页面,才能获取到

SpringMVC程序开发

2.返回text/html数据

可以在方法上使用  @ResponseBody 注解

SpringMVC程序开发

SpringMVC程序开发

SpringMVC程序开发

3.返回JSON对象

SpringMVC程序开发

SpringMVC程序开发

4.跳转

请求转发或请求重定向

return不但可以返回一个视图,还可以实现跳转.跳转的方式有两种:

1.forward,请求转发

SpringMVC程序开发

SpringMVC程序开发

使用request对象也能进行请求转发

SpringMVC程序开发

SpringMVC程序开发

2.redirect,请求重定向

SpringMVC程序开发

SpringMVC程序开发

还可以使用response对象重定向

SpringMVC程序开发

SpringMVC程序开发

3.请求重定向和请求转发的区别

请求重定向(Redirect)和请求转发(Forward)都是 Web 应用程序中常用的两种跳转方式。

        请求重定向是指服务器收到请求后,返回一个指示客户端重新发送请求到另一个 URL 地址的响应。客户端接收到这个响应后,会重新向新的 URL 发送一个新的请求,完成跳转。请求重定向是在本次请求完成之后,重新发起一次 GET 请求,所以它的缺点是会多消耗一次服务器资源,但它的优点是可以避免表单重复提交等问题,还可以避免表单重复提交等问题。

优点: 

避免表单重复提交等问题.

避免表单重复提交等问题.

缺点:

多消耗一次服务器资源

        请求转发是指当客户端向服务器发起请求时,服务器不会直接响应客户端请求,而是将请求转发给另一个资源进行处理,并将其响应结果返回给客户端。请求转发是在服务器内部完成的,客户端无法感知到该过程,因为只有一个请求和一个响应。请求转发不需要重新发起新的请求,相比请求重定向,速度更快,但它的缺点是只能在同一 Web 应用程序内进行跳转,无法实现跨域名跳转。

优点:

速度更快.

请求转发不需要重新发起新的请求.

缺点:

无法实现跨域名跳转

5.热部署

最后介绍一下IDEA提供的热部署功能

Java 的热部署(Hot Deployment)是指在应用程序运行过程中,无需重启应用程序或重新部署应用程序即可更新应用程序的代码或资源。也可以理解为在不停止应用程序的情况下,动态地将新的代码或资源加载到应用程序中。方便了我们开发的工作

步骤:

1.添加热部署框架支持

SpringMVC程序开发

2.Settings开启项目自动编译

需要配置两次,一次是 本项目,一次是 新项目.

SpringMVC程序开发

3.Advanced Settings

SpringMVC程序开发

4.使用Debug启动

SpringMVC程序开发

代码改变后,就会自动重新启动 文章来源地址https://www.toymoban.com/news/detail-451611.html

到了这里,关于SpringMVC程序开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 驱动开发基础知识——认识LED驱动程序 (二)

     个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导

    2024年01月21日
    浏览(38)
  • 微信小程序开发工具的目录结构

    1  .js文件:页面脚本文件,存放页面数据、事件处理函数等。——处理用户操作  app.js文件:整个项目的入口文件,通过调用App()函数启动项目。  页面.js文件:页面入口文件,调用Page()函数,创建并运行页面。 普通.js文件:普通功能模块文件,用来封装公共的函数或

    2024年02月05日
    浏览(53)
  • 认识钉钉小程序_搭建一个简单的小程序---钉钉小程序开发教程001

        其实这里面开发的时候具体,应该有很多的坑,不过..因为暂时不需要具体做,我仅仅查了一下怎么做,记录一下,以后不用再查了.     感觉钉钉小程序开发比微信小程序开发要更便捷,简单一些.首先要注册一个开发者,其实登录上钉钉账号就可以了.然后可以看看,快速入门,我没

    2024年02月09日
    浏览(44)
  • 微信小程序入门及开发准备,申请测试号以及小程序开发的两种方式,目录结构说明

    目录 1. 介绍 1.1 优点 1.2 开发方式 2. 开发准备 2.1 申请 2.2 申请测试号 2.2 小程序开发的两种方式 2.3 开发工具 3. 开发一个demo 3.1 创建项目 3.2 配置 3.3 常用框架 3.3 目录结构说明 3.4 新建组件 是一种不需要下载安装即可使用的应用,是一种 触手可及 的应用 可以借助微信的流量

    2024年02月05日
    浏览(44)
  • 微信小程序之自定义组件开发

    从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护。自

    2024年02月02日
    浏览(57)
  • 微信小程序自定义tabBar,前端开发技能

    首页 分类 留言 我的 /components/index-tabbar/index.js Component({ properties: { active: { type: String, value: ‘index’ }, }, methods: { onChange(event) { wx.redirectTo({ url: /pages/${event.detail}/index , }) } } }) 模拟的 tabbar 页面写法如下: /pages/home/index.json { “usingComponents”: { “index-tabbar”: “/components/index-ta

    2024年04月22日
    浏览(37)
  • 【BMC】OpenBMC开发基础1:自定义项目和程序

    在进行OpenBMC开发之前首先需要对OpenBMC的代码框架做简单的介绍。 OpenBMC是基于OpenEmbeded(后面简称OE)这个开源框架的,该框架提供的了一系列的工具(最重要的是bitbake)以及一系列的文件。这些文件包括配置、配方等等。每个配方对应一个特定的实现,比如它可以描述一个

    2024年02月14日
    浏览(44)
  • 【微信小程序开发】学习小程序的模块化开发(自定义组件和分包加载)

    模块化开发是一种将复杂的应用程序分解为一系列独立的模块,每个模块负责完成特定的功能的开发方式。模块化开发可以提高代码的可维护性和可复用性,使开发过程更加高效和灵活。 模块化开发在软件开发领域中被广泛应用,其重要性和优势不言而喻。 首先,模块化开

    2024年02月05日
    浏览(59)
  • uniApp开发小程序自定义tabBar底部导航栏+tabBar中间凸起自定义样式实现

            先看效果是否可以满足你们,如果可以满足你只要一步一步照着做绝对没有错。         本人技术不佳,研究了一整天,全网的大佬们写的博客看的晕头转向,避免大伙再走弯路,跟着我以下步骤一点一点来绝对可以实现。         最终效果图: (如果你

    2024年02月04日
    浏览(49)
  • 微信小程序隐私协议自定义页面(弹窗)开发流程以及低版本兼容

    这里我选择的是全局监听,进入小程序就会监控用户有没有同意,没有则进行弹窗,不同意则关闭,这个逻辑可以根据自己需要随便修改。 发现有很多人根据自己调试基础库来排查自己涉不涉及,你的小程序是否涉及隐私协议整改,还是看有没有调用涉及隐私接口,如果有,

    2024年01月16日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包