springboot学习笔记(二)

2023-12-20 08:04:42

1.Spring 和SpringBoot区别

2.Web开发入门

3.MVC模型

4.@RequestMapping用法

5.RESTful

1.Spring 和SpringBoot区别

参考:

大家都懂Spring和SpringBoot的区别吗? - 知乎

https://www.zhihu.com/question/598494506/answer/3018702101

在学习了Spring和初步了解了SpringBoot之后,我想讨论一下这俩者的区别,从我一个初学者的角度出发,看待这个问题。

a.Spring依赖XML配置文件,虽然也支持Java配置和注解,但是早期还是以XML配置为主。SpringBoot通过各种的注解,极大地缩减了或者说消除了XML配置文件

b.Springboot集成了许多依赖项,大大减少了项目的搭建和开发流程。提供的“starters” poms来简化 Maven 配置。

Maven依赖:

首先,让我们看一下使用Spring创建Web应用程序所需的最小依赖项

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>5.1.0.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>5.1.0.RELEASE</version> 
</dependency>

与Spring不同,Spring Boot只需要一个依赖项来启动和运行Web应用程序:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
    <version>2.0.6.RELEASE</version> 
</dependency>

在 Spring 项目中,我们应该将Spring Test , JUnit , Hamcrest 和 Mockito添加为依赖项。但是在 Spring Boot中 ,我们只需要添加 spring-boot-starter-test 依赖项来自动包含这些库。 Spring Boot为不同的Spring模块提供了许多依赖项。一些最常用的是: spring-boot-starter-data-jpa spring-boot-starter-security spring-boot-starter-test spring-boot-starter-web spring-boot-starter-thymeleaf

2.Web开发入门

a.Spring Boot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。

b.创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter-web组件加入到项目中。

c.spring-boot-starter-web启动器主要包括web、webmvc、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。

d.webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带的容器依赖。

3.MVC模型介绍

a.
Controller:控制器,接受用户的HTTP请求,向Model请求响应的数据,将请求得到的数据发送给视图View进行渲染。
View:视图,接受Controller控制器的返回的数据,对数据进行渲染,最终返回给用户网页页面。
Model:模型,接受Controller控制器的请求,并返回对应的数据。
b.
Controller连接View和Model,十分重要,在SpringBoot中,提供了@Controller和@RestController两种注解来标识此类负责接受和处理HTTP请求。如果请求的是页面和数据,使用@Controller注解,但是这样必须返回页面和数据,或说是前后端不分离,这与当前的前后端分离趋势不符合,所以现在大部分是使用@RestController。@RestController负责返回数据。
?c.
@RestController 默认情况下,该注解会将返回的对象数据转换为JSON格式。
User代码:
 * Copyright 2013-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.demo.demos.web;

/**
 * @author <a href="mailto:chenxilzx1@gmail.com">theonefx</a>
 */
public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

运行结果:返回结果是JSON格式

4.@RequestMapping用法

5.RESTful服务

RESTful是目前流行的互联网软件服务架构设计风格,它不是一个标准,更像一组客户端和服务端交互时的架构理念和设计原则,基于这种架构理念和设计原则的WEB API更加简洁,更有层次。

RESTful的特点:

a.每一个URL代表一种资源
b.客户端使用GET、POST、PUT、DELETE四种标识操作方式的动词对服务端资源进行操作:GET用于获取资源,POST用于新建资源(或更新资源),PUT用于更新资源,DELETE则表示删除资源。
c.通过操作资源的表现形式来实现服务端请求操作
d.资源的表现形式是JSON或HTML
e.客户端与服务端之间的交互请求之间是无状态的,从客户端到服务端的每个请求包含必须得信息。

符合RESTful的API特性:

a.安全性:安全的方法被期望不会产生任何副作用,当我们使用GET操作获取资源时候,不会引起资源本身的改变,也不会引起服务器状态的改变。
b.幂等性:幂等的方法保证了重复进行一个请求和一个请求的效果是相同的(并不是指响应总是相同的,而是指服务器上的资源的状态从第一次请求后就不再改变),在数学上的幂等性是指N次变换和一次变换是相同的。
HTTP Method:

在SpringBoot当中实现RESTful服务:

SpringBoot提供的spring-boot-starter-web组件完全支持开发RESTful API,提供了与REST操作方式相对应的注解。
@GetMapping:处理GET请求,获取资源
@PostMapping:处理POST请求,新建资源
@PutMapping:处理PUT请求,更新资源
@DeleteMapping:处理DELETE请求,删除资源
@PatchMapping:处理PATCH请求,用于部分更新资源
在RESTful架构中,每个网址代表了一种资源,所以URL中建议不要包含中词,只包含名词即可,而且所用的名词往往与数据库的表格名相对应。下图为用户管理API示例:
对应SpringBoot中RestController代码:

文章来源:https://blog.csdn.net/qq_40377374/article/details/135079726
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。