【JavaEE进阶】Spring MVC(1)

devtools/2025/2/11 8:55:10/

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗

如有错误,欢迎指出~


Maven

Maven是⼀个项⽬管理⼯具,通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包.

Maven提高了我们的开发效率,减少了bug,Maven提供的功能非常多,我们主要使用Maven来构建项目和管理依赖,Idea本身已经集成了maven,无需再安装

打包:把所有的class⽂件,全部放在⼀起,打成jar包或者war包

依赖管理

pom.xml是maven的配置⽂件,⽤以描述项⽬的各种信息(对于pom文件的任何修改都要刷新Maven)

依赖:指当前项⽬运⾏所需要的jar包

⽐如前⾯学习JDBC时,我们需要⼿动下载mysql-connector-java的包.并且添加到项⽬中.但是如果使⽤Maven,我们只需要在pom.xml中引⼊mysql-connector-java的依赖就可以了(添加后,记得要刷新Maven)

Maven仓库

上图添加的代码,称之为"坐标",是唯⼀的.在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个jar包,缺⼀不可.

 当我们在pom⽂件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库⾥寻找Jar包,并下载下来,添加到项⽬中.这个Jar包下载的地⽅就称为仓库(⽤于存储资源,管理各种jar包) 

Maven仓库的本质就是⼀个⽬录(⽂件夹),这个⽬录被⽤来存储开发中所有依赖(jar包,插件等).

Maven仓库分为两⼤类:本地仓库和远程仓库.

其中远程仓库⼜分为中央仓库,私服和其他公共

中央仓库地址:Central Repository:https://repo1.maven.org/maven2/https://repo1.maven.org/maven2/

本地仓库:自己计算机上用来存储jar包的目录

 

当项目引入依赖jar时,会先在本地仓库中寻找对应的jar包,若有,就直接引用,若没有,则去中央仓库中下载对应的jar包到本地仓库 

私服 全称私有服务器,一般由公司团队搭建的私有仓库,有一定的权限限制,

有了私服后,当Maven需要下载资源时,先从本地仓库获取,若没有,从私服获取,若还是没有,再从中央仓库下载,若依然没有,则会报错. 如果中央仓库存在,会先缓存在私服中,再缓存到本地仓库里.

配置国内源 

因为中央仓库在国外,所以下载起来会⽐较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源 

上述配置的内容,只对当前项⽬⽣效,为了让后续新建的项⽬也⽣效,需要重新设置⼀下新项⽬的 Settings.当前项⽬和新项⽬共⽤⼀个setttings⽂件即可,所以新项⽬的设置,只需要确认⼀下settings⽂件的路径即可.

依赖传递

 比如A依赖B,B依赖C,那么A项目引入B的同时也要引入C,使用Maven可以避免管理所需依赖的关系,我们只需在pom文件中,定义直接依赖就行了,Maven会自动把所依赖的其他jar包也一起导入

项⽬A通过Maven引⼊JarA时,会⾃动引⼊JarB和JarC. 

JarA和项⽬B就是项⽬A的直接依赖.

JarB,JarC是间接依赖. 

  • 直接依赖:在当前项⽬中通过依赖配置建⽴的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项⽬间接依赖其他资源  

依赖排除

如上图中,如果项⽬A不需要JarB,也可以通过排除依赖的⽅式来实现. 

排除依赖: 指主动断开依赖的资源。(被排除的资源⽆需指定版本)

Maven Help插件

当项⽬⽐较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突.解决冲突之前,需要先 找到冲突,我们可以 使⽤Maven Help插件来观察包和包之间的依赖关系.

像IDEA这样的程序虽然功能强⼤,但是也⽆法⾯⾯俱到.对于⼀些特殊场景的功能,开发者就可以开 发⼀些"插件".如果需要这个插件,就单独安装. 

插件就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展.

下面演示安装Maven Help插件,安装 后需要重启下idea,才能⽣效

MVC定义

MVC是ModelViewController的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分 为模型、视图和控制器三个基本部分

  • View(视图)指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
  • Model(模型)是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
  • Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型 来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型 

SpringMVC  

Spring Web MVC 简称 Spring MVC,是一个实现了MVC模式的web框架

Spring Boot

Spring Boot 是实现Spring MVC的其中⼀种⽅式.  Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring Web  MVC框架,  来实现web功能. 

@RestController 是注解,即可以修饰类,也可以修饰方法,可以称为类注解或方法注解 ,路径上的/ 可以省略,但通常不省略

推荐加上类注解@RequestMapping,这样可以有效避免路径重复,比如不同的Java文件中有相同方法名,若没加上类注解会出现报错

前端代码放到static路径下

 注解@RestController

Spring会对所有的类进⾏扫描,如果 类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法 有没有加@RequestMapping 这个注解 , 也就是说,如果不加@RestController,Spring看不到后面的代码

  • 类路径可能没有(但建议加上,否则当方法路径一样时 会报 路径相同错误)
  • 方法路径一定有,其中路径中的 / 可以不加,但通常不省略

@RequestMapping

@RequestMapping 是Spring Web MVC应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的. 表⽰服务收到请求时,路径为/say的请求就会调⽤print这个⽅法的代码.

路由映射:当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.

既可以支持post请求,又可以支持get请求, 也可以通过方法指定"只支持get"或"只支持post"方法.既是 类注解(修饰类时),也是 方法注解(修饰方法时)

只支持get请求

@GetMapping

以下两种代码等价,都是只支持get请求

    @RequestMapping(value = "/v1",method = RequestMethod.GET)//表示只接收get方法 ,等同于GetMappingpublic String print(){return "hello v1";}@GetMapping("/v2")public String v2(){return "hello v2";}

如果构造的是post请求,但服务器只接收get请求,就会报405,方法类型错误 

 只支持post请求

@PostMapping

以下两种代码等价,都是只支持post请求

    @RequestMapping(value = "/v3",method = RequestMethod.POST)//表示只接收get方法public String v3(){return "hello v3";}@PostMapping("/v4")//只支持post请求public String v4(){return "hello v4";}

利用postman发送请求

传递一个参数

学习后端如何接收 前端传过来的参数

传递的普通参数,默认类型是String,后端接收时,根据 后端定义的类型进行转换

下面代码中使用 int和Integer都可以接收整形数据, 但是使用int,前端就必须要传递整形数据(否则报错),而使用Integer则不传递数据也行(直接会显示null)

 除了boolean类型传递时可以为空,其他普通类型必须有值,所以尽量使用Integer等包装类型

传递多个参数 

    @RequestMapping("/p2")//传递多个参数public String p2(String name,Integer age){return "接收到参数name: "+name+",age: "+age;}

给参数重命名 

 当前端传递的参数名称不一致时,后端要使用 @RequestParam注解 对参数绑定 

    @RequestMapping("/p4")//给参数重命名public String p4(@RequestParam("userName") String name, @RequestParam("userAge") Integer age){return "接收到参数name: "+name+",age: "+age;}

当加了这个注解时(比如@RequestParam("userName")) ,前端传递的key必须也是userName并且变成了"必传参数",当然也可以修改

  @RequestMapping("/p4")//给参数重命名public String p4(@RequestParam(value="userName",required = false) String name, @RequestParam("userAge") Integer age){return "接收到参数name: "+name+",age: "+age;}

 

 参数绑定

@RequestParam("userName")表示前端传过来的参数必须是userName,默认是必传参数

 

传递对象 

当传递多个参数时,可以将这些参数放到一个对象中,然后传递对象,这样修改代码时也更容易修改(当对象中的参数改变时,不用修改 "后端的方法代码",直接在对象中修改参数即可)

后端直接接收

    @RequestMapping("/p7")public String p7(User user){return "接收到参数user: "+ user;}

传递数组

    @RequestMapping("/p5")public String p5(String[] arr){return "arr:"+ List.of(arr);//将数组以list的形式显示}

其中可以将参数写到一起传,效果是一样的

传递List

 前端传递的默认是以数组的形式传过来的,所以要进行参数绑定,将参数转换成list形式

    @RequestMapping("/p6")public String p6(@RequestParam List<String> list){return "list:"+list;}


http://www.ppmy.cn/devtools/157883.html

相关文章

vi 是 Unix 和 Linux 系统中常用的文本编辑器

vi是 Unix 和 Linux 系统中常用的文本编辑器&#xff0c;它有几种不同的模式&#xff0c;其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行&#xff0c;以下是一些常用的vi命令来控制光标位置&#xff1a; • h,j,k,l&#xff1a;分别用于将光标向左、向下、向…

22.3、IIS安全分析与增强

目录 IIS安全威胁分析iis安全机制iis安全增强 IIS安全威胁分析 iis是微软公司的Web服务软件&#xff0c;主要提供网页服务&#xff0c;除此之外还可以提供其他服务&#xff0c;第一个最主要的是网页服务&#xff0c;第二个是SMTP邮件服务&#xff0c;第三个是FTP文件传输服务。…

从长尾关键词到页面优化,打造完整的SEO策略

在今天的互联网时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;是让你的网站在Google等搜索引擎上排名更高的关键。想要提升网站流量&#xff0c;吸引更多访客&#xff0c;SEO是必不可少的工具。为了让网站在Google等搜索引擎上取得更好的排名&#xff0c;采用全面的…

系统URL整合系列视频五(后端技术实现)

视频 系统URL整合系列视频五&#xff08;后端技术实现&#xff09; 视频介绍 &#xff08;全国&#xff09;大型分布式系统Web资源URL整合需求后端技术实现。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。安全级别提高的同时也…

SpringCloud面试题----Eureka的工作原理

Eureka 的工作原理主要涉及服务注册、服务续约、服务拉取、服务下线和自我保护等几个关键机制&#xff0c;以下是详细介绍&#xff1a; 服务注册 当 Eureka 客户端&#xff08;即服务提供者&#xff09;启动时&#xff0c;它会向 Eureka Server 发送一个 HTTP POST 请求&…

使用Kickstart配置文件封装操作系统实现Linux的自动化安装

使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意&#xff0c;配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …

解决虚幻Unreal Engine手动配置安卓打包环境后无法识别SDK问题

情况说明 首先确保sdk、jdk、ndk版本和地址全部正确&#xff0c;ANDROID_HOME、JAVA_HOME、ANDROID_NDK_HOME环境变量配置正确&#xff08;这一步网上教程很多&#xff09;UE能够正常打包apk出来&#xff0c;只是打包平台那里没有识别到安卓的logo&#xff0c;而是三角形内一个…

如何高效管理多个Facebook账户:矩阵操作的最佳实践

在当今社交媒体的时代&#xff0c;Facebook已成为许多人和企业日常生活的一部分。无论是个人用户管理多个账户&#xff0c;还是企业需要处理多个品牌的社交媒体形象&#xff0c;如何高效地管理多个Facebook账户成为了一项重要技能。通过使用矩阵操作的方式&#xff0c;可以帮助…