关于前端:SpringBoot二基础知识

1次阅读

共计 7192 个字符,预计需要花费 18 分钟才能阅读完成。

1、配置文件

SpringBoot 提供了多种属性配置形式

1)application.properties

优先级最高

server.port=80
2)application.yml

第二优先级

长处:
  • 容易浏览
  • yaml 类型的配置文件比 xml 类型的配置文件更容易浏览,构造更加清晰
  • 容易与脚本语言交互
  • 以数据为外围,重数据轻格局
  • yaml 更重视数据,而 xml 更重视格局
语法规定
  • 大小写敏感
  • 属性层级关系应用多行形容,每行结尾应用冒号完结
  • 应用缩进示意层级关系,同层级左侧对齐,只容许应用空格(不容许应用 Tab 键)
  • 空格的个数并不重要,只有保障同层级的左侧对齐即可。
  • 属性值后面增加空格(属性名与属性值之间应用冒号 + 空格作为分隔)
  • 示意正文

== 外围规定:数据后面要加空格与冒号隔开 ==

server:
  port: 81
3)application.yaml
server:
  port: 82

2、Jar 包

1)打包

在 pom.xml 退出插件

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

咱们只须要应用 Mavenpackage 指令打包就会在 target 目录下生成对应的 Jar 包。

2)启动

进入 jar 包所在位置,在 命令提示符 中输出如下命令

jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar

执行上述命令就能够看到 SpringBoot 运行的日志信息。

3、parent

SpringBoot 关注到开发者在进行开发时,往往对依赖版本的抉择具备固定的搭配格局,并且这些依赖版本的抉择还不能乱搭配。比方 A 技术的 2.0 版与 B 技术的 3.5 版能够单干在一起,然而和 B 技术的 3.7 版合并应用时就有抵触。其实很多开发者都始终想做一件事件,就是将各种各样的技术配合应用的常见依赖版本进行收集整理,制作出了最正当的依赖版本配置计划,这样应用起来就不便多了。

SpringBoot 一看这种状况 so easy 啊,于是将所有的技术版本的常见应用计划都给开发者整顿了进去,当前开发者应用时间接用它提供的版本计划,就不必放心抵触问题了,相当于 SpringBoot 做了无数个技术版本搭配的列表,这个技术搭配列表的名字叫做 <font color=”#ff0000″>parent</font>。

<font color=”#ff0000″>parent</font> 本身具备很多个版本,每个 <font color=”#ff0000″>parent</font> 版本中蕴含有几百个其余技术的版本号,不同的 parent 间应用的各种技术的版本号有可能会发生变化。当开发者应用某些技术时,间接应用 SpringBoot 提供的 <font color=”#ff0000″>parent</font> 就行了,由 <font color=”#ff0000″>parent</font> 帮忙开发者对立的进行各种技术的版本治理

比方你当初要应用 Spring 配合 MyBatis 开发,没有 parent 之前怎么做呢?选个 Spring 的版本,再选个 MyBatis 的版本,再把这些技术应用时关联的其余技术的版本逐个确定下来。当你 Spring 的版本发生变化须要切换时,你的 MyBatis 版本有可能也要跟着切换,关联技术呢?可能都要切换,而且切换后还可能呈现问题。当初这所有工作都能够交给 parent 来做了。你无需关注这些技术间的版本抵触问题,你只须要关注你用什么技术就行了,抵触问题由 <font color=”#ff0000″>parent</font> 负责解决。

有人可能会提出来,万一 <font color=”#ff0000″>parent</font> 给我导入了一些我不想应用的依赖怎么办?记分明,这一点很要害,<font color=”#ff0000″>parent</font> 仅仅帮咱们进行版本治理,它不负责帮你导入坐标,说白了用什么还是你本人定,只不过版本不须要你治理了。整体上来说,<font color=”#ff0000″> 应用 parent 能够帮忙开发者进行版本的对立治理 </font>。

  • 我的项目中的 pom.xml 中继承了一个坐标
<parent>
    <!-- 引入父工程 SpringBoot(启动器 Starter), 它外面蕴含了许多 SpringBoot 的子工程 -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
</parent>
  • 关上后能够查阅到其中又继承了一个坐标
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.4</version>
</parent>
  • 这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性,上面列出依赖版本属性的部分,能够看的进去,定义了若干个技术的依赖版本号
<properties>
    <activemq.version>5.16.3</activemq.version>
    <aspectj.version>1.9.7</aspectj.version>
    <assertj.version>3.19.0</assertj.version>
    <commons-codec.version>1.15</commons-codec.version>
    <commons-dbcp2.version>2.8.0</commons-dbcp2.version>
    <commons-lang3.version>3.12.0</commons-lang3.version>
    <commons-pool.version>1.6</commons-pool.version>
    <commons-pool2.version>2.9.0</commons-pool2.version>
    <h2.version>1.4.200</h2.version>
    <hibernate.version>5.4.32.Final</hibernate.version>
    <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
    <httpclient.version>4.5.13</httpclient.version>
    <jackson-bom.version>2.12.4</jackson-bom.version>
    <javax-jms.version>2.0.1</javax-jms.version>
    <javax-json.version>1.1.4</javax-json.version>
    <javax-websocket.version>1.1</javax-websocket.version>
    <jetty-el.version>9.0.48</jetty-el.version>
    <junit.version>4.13.2</junit.version>
</properties>

第二组是各式各样的的依赖坐标信息,能够看出依赖坐标定义中没有具体的依赖版本号,而是援用了第一组信息中定义的依赖版本属性值

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
总之
  • 开发 SpringBoot 程序要继承 spring-boot-starter-parent
  • spring-boot-starter-parent 中定义了若干个依赖治理
  • 继承 parent 模块能够防止多个依赖应用雷同技术时呈现依赖版本抵触
  • 继承 parent 的模式也能够采纳引入依赖的模式实现成果

4、starter

SpringBoot 关注到开发者在理论开发时,对于依赖坐标的应用往往都有一些固定的组合形式,比方应用 spring-webmvc 就肯定要应用 spring-web。每次都要固定搭配着写,十分繁琐,而且格局固定,没有任何技术含量。

SpringBoot 一看这种状况,看来须要给开发者带来一些帮忙了。安顿,把所有的技术应用的固定搭配格局都给开发进去,当前你用某个技术,就不必一次写一堆依赖了,还容易写错,我给你做一个货色,代表一堆货色,开发者应用的时候,间接用我做好的这个货色就好了,对于这样的固定技术搭配,SpringBoot 给它起了个名字叫做 <font color=”#ff0000″>starter</font>。

starter 定义了应用某种技术时对于依赖的固定搭配格局,也是一种最佳解决方案,<font color=”#ff0000″> 应用 starter 能够帮忙开发者缩小依赖配置 </font>

这个货色其实在入门案例外面曾经应用过了,入门案例中的 web 性能就是应用这种形式增加依赖的。能够查阅 SpringBoot 的配置源码,看到这些定义

  • 我的项目中的 pom.xml 定义了应用 SpringMVC 技术,然而并没有写 SpringMVC 的坐标,而是增加了一个名字中蕴含 starter 的依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 在 spring-boot-starter-web 中又定义了若干个具体依赖的坐标
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

5、starter 与 parent 的区别

  • <font color=”#ff0000″> starter</font> 是一个坐标中定了若干个坐标,以前写多个的,当初写一个,<font color=”#ff0000″> 是用来缩小依赖配置的书写量的 </font>。
  • <font color=”#ff0000″>parent</font> 是定义了几百个依赖版本号,以前写依赖须要本人手工管制版本,当初由 SpringBoot 对立治理,这样就不存在版本抵触了,<font color=”#ff0000″> 是用来缩小依赖抵触的 </font>。

6、Restful 接口

1)Restful 接口申请格调

  RESTFUL 是一种网络应用程序的设计格调和开发方式,基于 HTTP,能够应用 XML 格局定义或 JSON 格局定义。RESTFUL 实用于挪动互联网厂商作为业务接口的场景,实现第三方 OTT 调用挪动网络资源的性能,动作类型为新增、变更、删除所调用资源。

  对资源的操作包含获取、创立、批改和删除,这些操作正好对应 HTTP 协定提供的 GET、POST、PUT 和 DELETE 办法。换言而知,应用 RESTful 格调的接口但从接口上你可能只能定位其资源,然而无奈通晓它具体进行了什么操作,须要具体理解其产生了什么操作动作要从其 HTTP 申请办法类型上进行判断。具体的 HTTP 办法和办法含意如下:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供残缺资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供须要批改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。
2)传统格调与 RestFul 比照
  1. 传统形式操作资源
  • http://127.0.0.1/item/queryIt…(查问,GET)
  • http://127.0.0.1/item/saveIte…(新增,POST)
  • http://127.0.0.1/item/updateI…(更新,POST)
  • http://127.0.0.1/item/deleteI…(删除,GET 或 POST)
  1. RestFul 形式操作资源
  • http://127.0.0.1/item/1(查问,GET)
  • http://127.0.0.1/item(新增,POST)
  • http://127.0.0.1/item(更新,PUT)
  • http://127.0.0.1/item/1(删除,DELETE)

7、申请参数罕用注解

6、7 代码演示

@RestController     //@Controller + @ResponseBody
@RequestMapping("Stu")                                      // 抽出 Stu
@Slf4j              //lombok 的日志注解
public class StudentController {@GetMapping("{stuId}/get")        // 定义申请门路
    public String getStu(@PathVariable("stuId") String stuId,
                         @RequestParam("id") String Id,
                         @RequestParam("name") String name
                         ) {
        /**
         * @PathVariable("stuId") url 门路的参数
         * @RequestParam 用于取得 url 中的参数, 如果与前端参数统一则,能够不写
         */
        log.info("stuId:{},id:{},name:{}", stuId, Id, name);
        log.warn("stuId="+stuId);
        log.warn("id="+ Id);
        log.warn("name="+name);
        return "查问 Stu";
    }

    @PostMapping("create")        // 定义申请门路
    public String createStu(@RequestBody Map<String,Object>map,
                            @RequestHeader("token") String token,
                            @CookieValue("clientId") String clientId,
                            HttpServletRequest request
                            ) {
        /**
         * @RequestBody 用于取得前端发送的数据 Json
         * @RequestHeader 用于取得申请头中的数据
         * @CookieValue 用于取得 cookie 中的数据
         */
        log.warn("token="+token);
        log.warn("clientId="+clientId);
        log.warn("map="+map.toString());
        String header = request.getHeader("token");
        log.warn("header="+header);
        return "新增 Stu";
    }

    @PutMapping("update")        // 定义申请门路
    public String updateStu() {return "批改 Stu";}

    @DeleteMapping("delete")        // 定义申请门路
    public String deleteStu() {return "删除 Stu";}


}
正文完
 0