欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Spring Boot

Spring Boot

2024/10/25 13:19:58 来源:https://blog.csdn.net/QUIXOTIC_/article/details/143204926  浏览:    关键词:Spring Boot

在这里插入图片描述

目录

  • 1. Maven
    • Maven的介绍
    • 创建Maven项目:
  • 2. Spring Boot
    • Spring Boot的介绍
    • 创建项目
      • 安装插件(专业版可跳过)
      • 创建第一个Spring Boot项目
      • 实现SpringBoot的helloworld
  • 3. Spring MVC
    • 创建Spring MVC项目
    • 建立连接
      • @RequestController注解
      • @RequestMapping 注解
      • @GetMapping注解
      • @PostMapping注解
    • 请求
      • 接收一个参数
      • 接收多个参数
      • 使用对象接收多个参数
      • 参数重命名
      • 使用数组接收多个参数
      • 使用集合接收
      • 接收json数据
      • 获取url中路径参数
      • 获取上传的文件
      • 获取Cookie和Session
      • 获取Header
    • 响应
      • 返回html页面
      • 返回html代码片段
      • 返回json数据
      • 设置状态码
      • 设置Header
  • 4. 小案例:加法计算器

在介绍SpringBoot之前,先介绍一下Maven~

1. Maven

Maven的介绍

Maven 是一个项目管理和构建自动化工具,主要服务于基于 Java 的项目。它由 Apache 软件基金会维护。Maven 主要用于项目的依赖管理、构建过程的自动化、项目信息管理等。
什么是依赖?:“依赖”通常指的是一个软件组件(如库、框架、模块等)在运行或构建过程中需要的其他组件
Maven的核心功能:

  1. 依赖管理:Maven 能够自动下载项目所需的所有依赖,并管理这些依赖的版本,确保项目中使用的库是最新且兼容的。
  2. 项目构建:Maven 定义了一系列生命周期(如编译、测试、打包、部署等),通过简单的命令可以自动执行这些构建步骤。
  3. 项目管理:Maven 通过 pom.xml 文件(Project Object Model)来定义项目的构建过程、依赖关系、插件配置等,使得项目管理更加标准化和自动化。

创建Maven项目:

IDEA帮我们集成了Maven,所以我们不需要自己再去下载安装了~

创建项目之前,先设置好本地仓库以及镜像源:

在IDEA中,打开设置settings,搜索框中输入Maven,下面的设置尽量和我的一样

在这里插入图片描述

大家可以自己创建一个目录作为本地仓库,结构如下
在这里插入图片描述

在settings.xml文件添加下面的内容:

<mirrors><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>
</mirrors>

如果大家没有这个文件,可以去我的仓库中下载[仓库链接](https://gitee.com/vampire-wpre/learning-resource/tree/master/配置文件/Maven 配置文件)
在这里插入图片描述

接下来就可以创建项目了

在这里插入图片描述

选择项目路径,点击finish

在这里插入图片描述

点开pom.xml文件,添加下面的代码

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency>
</dependencies>

之前我们编写JDBC程序时需要自己下载导入jar包,非常麻烦,现在我们只需要在pom.xml文件中添加下面的内容,然后点击刷新,就可以完成jar包的加载。

在这里插入图片描述

如果找不到刷新按钮,点击右上角的Maven
在这里插入图片描述

有一个刷新按钮
在这里插入图片描述

刷新之后我们可以找到Maven帮我们加载的jar包

在这里插入图片描述

如果我们需要下载其他的jar包,直接去Maven中央仓库https://mvnrepository.com/搜索
在这里插入图片描述

选择我们想要的jar包以及版本,直接把这段代码复制到pom.xml文件中就可以了

在这里插入图片描述

2. Spring Boot

Spring Boot的介绍

Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它简化了基于Spring的应用开发,通过“约定大于配置”的原则,让开发者可以轻松地创建独立运行的、生产级别的Spring应用。

创建项目

安装插件(专业版可跳过)

IDEA社区版需要下载Spring Boot Helper插件才能创建SpringBoot项目(专业版不需要),Spring Boot Helper插件下载链接

在这里插入图片描述

有一个免费版本,其他是收费的,并且这个免费版本的插件要求我们的IDEA是2021.1~2022.1.4这个范围内才能使用

在这里插入图片描述

下载好之后是个压缩包,不需要压缩,我们打开IDEA,

在这里插入图片描述

选择我们下载好的压缩包
在这里插入图片描述

这样插件就安装好了

创建第一个Spring Boot项目

打开IDEA,选择new Project
在这里插入图片描述

项目类型选择Maven
在这里插入图片描述

选择web->Spring Web
在这里插入图片描述

Spring Boot版本选择3.3.4或者3.2.10
在这里插入图片描述

接下来选择项目路径,然后点击finish
在这里插入图片描述

这样我们的项目就创建好了,创建好之后,右下角的Load Maven Project一定要点~
在这里插入图片描述

点开pom.xml文件,
在这里插入图片描述

修改之后刷新Maven
在这里插入图片描述

实现SpringBoot的helloworld

创建一个新的类ParamController,代码如下

@RestController
public class ParamController {@RequestMapping("/p1")public String p1() {return "Hello World";}
}

启动程序,

接着在浏览器中输入

http://127.0.0.1:8080/p1

http:请求的协议

127.0.0.1:IP地址,127.0.0.1表示本机(自己的电脑)

8080:端口号,8080是Tomcat(一个Web服务器)的端口号
在这里插入图片描述

p1:资源路径
在这里插入图片描述

3. Spring MVC

关于Spring MVC:

  • Spring MVC 是 Spring 框架中的一个模块,专门用于构建 Web 应用程序。
  • 它实现了 MVC(Model-View-Controller)设计模式,帮助开发者将应用程序分为模型、视图和控制器,以实现关注点分离。
  • Spring MVC 提供了强大的数据绑定、验证、选择视图和处理异常等功能。
  • 它通常与 Spring 框架的其他模块一起使用,以构建完整的 Web 应用程序。

学习Spring MVC,主要学习以下几个方面:

1、建立连接: 将用户(浏览器)和Java程序连接,使得访问一个地址就能调用我们写的Spring程序

2、请求: 用户发送请求时会携带一下参数,我们要获取到这些参数

3、响应: 执行一些业务逻辑后,把结果返回给用户

创建Spring MVC项目

创建的方式和Spring Boot项目创建方式一模一样

建立连接

首先介绍一个工具Postman的使用:

Postman可以帮我们快速建立http请求
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

后续我们进行测试的时候就可以直接使用Postman帮我们构造http请求,发送给服务器,而不是自己写前端代码。

@RequestController注解

表明该类是一个控制器,用于处理 HTTP 请求。

@RequestMapping 注解

可以将一个或多个 HTTP 请求映射到一个控制器的方法上。这意味着当一个匹配的请求到达时,Spring MVC 将调用相应的方法来处理这个请求,建立连接通过RequestMapping。RequestMapping可以修饰类(类路径),也可以修饰方法(方法路径),访问时是类路径+方法路径。例如

@RestController
@RequestMapping("/param")//类路径是/param
public class ParamController {@RequestMapping("/p1")//方法路径是/p1public String p1(String name) {return name;}
}

上述代码中既有类路径又有方法路径,所以我们在访问某个方法时,必须是类路径+方法路径

http://127.0.0.1:8080/param/p1

RequestMapping既支持get请求,又支持post请求,但是我们通过可以设置参数来规定只支持get或者post,

//设置参数method = RequestMethod.GET,表示只接收get请求
@RequestMapping(value = "/p4", method = RequestMethod.GET)
public String p4() {return "p4";
}//设置参数method = RequestMethod.POST,表示只接收post请求
@RequestMapping(value = "/p5", method = RequestMethod.POST)
public String p5() {return "p5";
}

@GetMapping注解

表示只接收get请求

//GetMapping,只接收get请求
@GetMapping("/p6")
public String p6() {return "p6";
}

@PostMapping注解

表示只接收post请求

//PostMapping,只接收post请求
@PostMapping("/p7")
public String p7() {return "p7";
}

请求

我们需要从请求中接收、获取到某些信息

接收一个参数

请求参数要和url中查询字符串中的参数名一致才能接收

方法中的参数名要和url中查询字符串中的参数名一致才能接收

//1个参数
@RequestMapping("/p8")
public String p8(String name) {return "name: " + name;
}

接收多个参数

//多个参数
@RequestMapping("/p9")
public String p9(String name, Integer age) {//尽量使用包装类,因为前端传递的普通参数默认是String类型,后端接收时,使用包装类可以进行类型转换return "name: " + name + ", age: " + age;
}

使用对象接收多个参数

我们可以自定义一个类

public class User {private int age;private String name;private String gender;
}
//使用对象接收,多个参数
@RequestMapping("/p11")
public String p11(User user) {return "user: " + user;
}

Spring会根据参数名自动绑定到对象的各个属性上,如果某个参数没有传递,会赋值为默认值。

参数重命名

如果对前端传递过来的参数名字不习惯,我们可以对参数重命名,通过使用@RequestParam注解来完成。

//给前端的传递过来的参数重命名
@RequestMapping("/p12")
public String p12(@RequestParam("username") String name) {//前端的参数名字是username,我们后端定义的是name,@RequestParam的作用就是参数绑定//如果加上了这个注解,前端的参数名字必须和@RequestParam()括号内的名字一样,否则会报错return "name:" + name;
}@RequestMapping("/p13")
public String p13(@RequestParam(value = "username", required = false) String name) {//@RequestParam的required默认是true,表示必传参数,前端没有传这个参数会报错,//设置为false后,即使前端的参数为name,也不会报错return "name:" + name;
}

使用数组接收多个参数

当前端传递的参数像 name=张三&name=李四 这样重复的参数,会把它们封装成一个数组,我们后端可以使用数组接收

@RequestMapping("/p14")
public String p14(String[] arr) {return "arr: " + List.of(arr);
}

如果前端传的参数像 name=张三,李四,王五 此时数组的长度应该是3(会自动切割)

使用集合接收

前端封装好的数组,我们同样可以使用集合来接收,只不过需要加上@RequestParam来将数组绑定成对应的集合类型

//使用集合接收
@RequestMapping("/p15")
public String p15(@RequestParam List<String> list) {//前端传递的同样是数组,我们后端需要加上@RequestParam把前端传递的数组绑定成List//所以说,RequestParam既可以绑定参数名,也可以绑定类型return "list: " + list;
}

接收json数据

使用对象接收,并且加上@RequestBody注解

@RequestMapping("/p16")
public String p16(@RequestBody User user) {//RequestBody,表示从请求正文中拿到数据return "user: " + user;
}

获取url中路径参数

上述说的参数都是查询字符串中的参数,这里说的是路径上的参数,例如

url为

http://127.0.0.1:8080/param/p17/article/articleId

如果想要获取参数articleId,可以使用@PathVariable注解,例如:

@RequestMapping("/article/{articleId}")
public String p17(@PathVariable String articleId) {return "article" + articleId;
}

如果参数不止一个

//2个参数
@RequestMapping("/article/{articleId}/{name}")
public String p18(@PathVariable String articleId, @PathVariable String name) {return "article" + articleId + ",   name" + name;
}

"/article/{articleId}/{name}"中,{articleId}和{name}是占位符,如果只有name没有articleId则访问失败。

获取上传的文件

使用注解@RequestPart,MultipartFile类型的参数接收

//获取上传的文件
@RequestMapping("/p19")
public String p19(@RequestPart("fileName") MultipartFile file) {String name = file.getOriginalFilename();return "file: " + name;
}

获取Cookie和Session

获取Cookie:利用HttpServletRequest

//获取Cookie:传统方式,利用HttpServletRequest
@RequestMapping("/p20")
public String p20(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if (cookies == null) {//Cookie可能为空return "Cookie为空";}for (Cookie cookie : cookies) {System.out.println("name: " + cookie.getName() + " value: " + cookie.getValue());}return "获取到Cookie";
}

获取Cookie:使用注解

//注解的方式获取Cookie
@RequestMapping("/p21")
public String p21(@CookieValue("Vampire") String Vampire) {//@CookieValue(),括号中填写想要获取的key,获取到的key的value会给方法中的参数Vampirereturn "获取到Cookie,Vampire的值为 " + Vampire;
}

设置Session:Session是存储在内存中的,重启服务器会丢失Session,所以要设置Session

//设置Session
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();//先获取到Session,如果没有会创建一个session.setAttribute("username", "张三");//设置session,key-valuesession.setAttribute("age", 18);//设置session,key-valuereturn "设置Session成功";
}

获取Session:使用HttpServletRequest
getSession有参数版本:true->如果Session对象为空会创建一个Session对象;false->如果Session对象为空,不会创建Session对象,getSession默认为true

//获取Session
@RequestMapping("/p22")
public String p22(HttpServletRequest request) {//原理: 从Cookie中找到SessionID,根据SessionID拿到SessionHttpSession session = request.getSession();Object username = session.getAttribute("username");//可以理解为根据key获取valueObject age = session.getAttribute("age");if (username == null || age == null) {return "null";}return "name: " + username + ", age: " + age;
}

获取Session:使用HttpSession

@RequestMapping("/p23")
public String p23(HttpSession session) {Object username = session.getAttribute("username");Object age = session.getAttribute("age");if (username == null || age == null) {return "null";}return "name: " + username + ", age: " + age;
}

获取Session:使用注解@SessionAttribute

//第三种获取Session:使用注解
@RequestMapping("/p24")
public String p24(@SessionAttribute String username) {return "获取Session信息,username: " + username;
}

获取Header

使用HttpServletRequest

//获取Header:使用HttpServletRequest
@RequestMapping("/p25")
public String p25(HttpServletRequest request) {String UserAgent = request.getHeader("User-Agent");String ContentType = request.getHeader("Content-Type");return "UserAgent: " + UserAgent + ", ContentType: " + ContentType;
}

使用注解@RequestHeader

//获取Header:使用注解
@RequestMapping("/p26")
public String p26(@RequestHeader("User-Agent") String UserAgent) {return "UserAgent: " + UserAgent;
}

响应

在接收到请求之后,经过某些逻辑,我们给需要返回响应,这时我们会接触到另一个注解Controller。

Controller和RestController的区别

  • @Controller:是一个通用的控制器注解,它标记的类可以处理HTTP请求,但返回的视图通常需要通过Spring MVC的视图解析器来解析,适用于需要返回视图的Web应用程序,如传统的服务器渲染的Web页面
  • @RestController:是@Controller@ResponseBody的组合注解。这意味着任何标记了@RestController的类中的方法都会自动应用@ResponseBody,即方法的返回值将直接作为HTTP响应的正文返回,而不是通过视图解析器解析。适用于构建RESTful API,通常返回JSON或XML格式的数据给客户端。

如果想返回数据,使用ResponseBody,如果想返回html页面,使用Controller。Controller是类注解,ResponseBody即是类注解,又是方法注解,加在类上表示该类的所有方法都返回数据,加在方法上表示该方法返回数据,其他方法不受影响。

返回html页面

@RequestMapping("/Response")
@Controller
public class ResponseController {//返回html页面@RequestMapping("/r1")public String r1() {return "/Test.html";}
}

返回html代码片段

@RequestMapping("/Response")
@Controller
public class ResponseController {//返回html代码片段@RequestMapping("/r3")@ResponseBodypublic String r3() {return "<h1>你好</h1>";//浏览器会解析成html代码}
}

返回json数据

@RequestMapping("/Response")
@Controller
public class ResponseController {//返回json数据@ResponseBody@RequestMapping("/r4")public User r4() {User user = new User();user.setAge(18);user.setName("张三");user.setGender("男");return user;//虽然这里返回的是user对象,但是实际上返回的就是json}
}

设置状态码

使用HttpServletResponse

@RequestMapping("/Response")
@Controller
public class ResponseController {//设置状态码,使用HttpServletResponse@ResponseBody@RequestMapping("/r5")public String r5(HttpServletResponse response) {response.setStatus(500);//设置状态码return "状态码设置成功";}
}

设置Header

@RequestMapping("/Response")
@Controller
public class ResponseController {//设置响应的Header,设置返回的数据类型@RequestMapping(value = "/r6", produces = "application/json")@ResponseBodypublic String r6() {return "{\"user\":wpre}";}//设置响应的Header,自定义key,value@RequestMapping(value = "/r7")@ResponseBodypublic String r7(HttpServletResponse response) {response.setHeader("Key1", "value1");return "设置成功";}}

4. 小案例:加法计算器

实现一个加法计算器,用户在浏览器中输入两个数后,后端返回这两个数相加的结果,最后将结果显示在浏览器中
前端代码:前端代码一般放在static文件夹中
在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="calc/sum" method="post"><h1>计算器</h1>数字1:<input name="num1" type="text"><br>数字2:<input name="num2" type="text"><br><input type="submit" value=" 点击相加 "></form></body></html>

后端代码:

@RestController
@RequestMapping("/calc")
public class CalcController {//实现计算器功能@RequestMapping("/sum")public String sum(@RequestParam("num1") Integer num1, @RequestParam("num2") Integer num2) {Integer sum = num1 + num2;return "计算结果:" + sum;}
}

效果展示
在这里插入图片描述

输入内容,点击按钮之后
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com