【JavaEE进阶】Spring MVC(1)

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗

如有错误,欢迎指出~


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方法 ,等同于GetMapping
    public 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;
    }
相关推荐
NE_STOP3 分钟前
SpringBoot--简单入门
java·spring
hqxstudying30 分钟前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
Dcs1 小时前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者1 小时前
Java的SPI机制详解
java
超级小忍1 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug2 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享2 小时前
Java Lombok 入门
java
程序无bug2 小时前
Spring 对于事务上的应用的详细说明
java·后端
食亨技术团队2 小时前
被忽略的 SAAS 生命线:操作日志有多重要
java·后端