Spring Boot学习篇(一)

news2024/9/22 13:33:47

Spring Boot学习篇(一)

1 Spring、SpringBoot、SpringCloud有什么区别?

spring一般指Spring框架(SpringFramework),它是一个开源、轻量级的Java应用开发框架。其核心是控制反转IOC和面向切面编程AOP。Spring提供了很多包括ORM、事务管理、WebMVC等非常有用的模块构建Java应用。
SpringBoot则是在Spring基础之上,用于快速构建Spring应用的一个框架,它并不是要取代Spring,而是基于Spring的。
SpringCloud是一个分布式微服务系统的开发框架,SpringBoot则是SpringCloud的基础设施。三者之间都不是取代的关系,而是一种倒三角的依赖关系,顶层是SpringCloud,中间层是SpringBoot,底层是Spring。
简单来说是就是现有Spring,再有SpringBoot,最后才有SpringCloud

2.创建并配置一个简单的springboot项目

2.1 创建一个maven方式的module

2.1.1 new➡module

在这里插入图片描述

2.1.2 选择maven和jdk版本为1.8后,点击next按钮

在这里插入图片描述

2.1.3 parent部分改为none写上合适的项目名(在空工程下面),然后点击next按钮

在这里插入图片描述

2.2 配置pom.xml

2.2.1 继承spring-boot项目

 <!--继承springboot项目 项目只能单一继承 先写artifactId标签后面的会有提示出来-->
   <parent>
       <artifactId>spring-boot-starter-parent</artifactId>
       <groupId>org.springframework.boot</groupId>
       <version>2.7.2</version>
   </parent>

2.2.2 导入依赖

a 导入springboot所需要的依赖
 <!--子项目中的依赖如果在父项目中定义了,就可以不指定版本,如果指定就用自己的-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>
b 导入热部署依赖
 <!--实现热部署 devtools英文短语有热部署的意思 依赖需要放在dependencies标签里面-->
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
  </dependency>

2.3 创建spring-boot启动类(java文件夹下面)

2.3.1 在java文件家下面创建com.zlz包

在这里插入图片描述

2.3.2 在zlz包下面创建start01类

a start类书写的内容如下所示
package com.zlz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//① 加上@SpringBootApplication注解
@SpringBootApplication
public class Start01 {
    //②通过main快捷键生成main方法
    public static void main(String[] args) {
        //③通过SpringApplication.run去启动它
        SpringApplication.run(Start.class);
    }
}
b 核心要点
@SpringBootApplication 是springboot启动注解,是spring boot的核心注解
它所在的类启动时,会扫描该类所在的目录以及目录下的所有子目录都能被扫描到
这个注解扫描的是spring相关的注解
如类位于com.zlz包下面 那么com.zking包下面的所有文件都能扫描到,com.zlz.abc包下面的所有文件也能被扫描到

2.4在com.zlz.controller包下面创建TestController类

2.4.1 在com.zlz包下面创建controller包,其目录结构如下图所示:

在这里插入图片描述

2.4.2 在controller包下面创建TestController类

package com.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//让该类的所有方法都返回json格式的字符串
@RestController
public class TestController {
    //给show方法加上一个访问地址
    @RequestMapping("show")
    public String show(){
        return "spring boot的第一次自行测试";
    }
}

2.5 启动spring boot项目,当出现下图所示的spring图形时,代表启动成功(配置没问题)

在这里插入图片描述

2.6 访问TestController类,测试controller包的位置是否放对了

在这里插入图片描述

2.6 @SpringBootApplication底层

重要的有以下三大注解
@SpringBootConfiguration 这是一个配置类 xml文件
@EnableAutoConfiguration  根据导入的依赖 自动配置环境 加了依赖一定需要做相应的配置(如导入了通用mapper时)
@ComponentScan 组件扫描 本包及其子目录<context:component-scan></context:component-scan>

3 把spring boot项目打包

3.0 准备工作:在pom.xml文件中加入如下代码

 <!--书写的位置:丢在dependencies依赖标签的下面-->
    <properties>
        <!--打包跳过单元测试-->
        <skipTests>true</skipTests>
    </properties>

    <build>
        <!--打包插件-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--启动入口-->
                <configuration>
                    <!--启动类 配置成加了这个@SpringBootApplication注解的类, 这个需要改成自己的
                    这个com.zlz.Start链接也要正常链接过去才行-->
                    <mainClass>com.zlz.Start01</mainClass>
                </configuration>
            </plugin>
        </plugins>


    </build>

3.1 两种方式

3.1.1通过命令

a 进入到项目src文件夹的所在的目录

在这里插入图片描述

b 地址栏输入cmd并回车

在这里插入图片描述

c 在cmd窗口输入如下指令并回车执行
mvn clean package

在这里插入图片描述

d 打包好后的效果如下所示

在这里插入图片描述

e 启动打包好的jar包程序
e1.进入jar包所在的文件夹

在这里插入图片描述

e2 输入java -jar jar包名指令回车就行

在这里插入图片描述

e3 测试之前的控制器地址是否还能访问

在这里插入图片描述

3.1.2 通过idea工具

a 找到需要打包的项目➡双击clean按钮

在这里插入图片描述

b 此时target文件夹被删除掉了

在这里插入图片描述

c 双击package按钮

在这里插入图片描述

d 项目目录下生成了target文件夹,并且target文件夹下有已经打包好的jar包,此时代表打包成功

在这里插入图片描述

4 spring boot下的过滤器(filter)

4.1 在com包.zlz包下面创建filter包,其目录结构如下所示

在这里插入图片描述

4.2 在filter包下面创建MyFilter文件

package com.zlz.filter;

public class MyFilter {
}

4.3 实现过滤器的两种方式

4.3.1 使用@WebFilter方式

a 书写过滤器类MyFilter
package com.zlz.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//①加上WebFilter注解并配上过滤的地址
@WebFilter("/*")
//② 实现filter接口并重写doFilter方法,该接口是javax包下面的
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //③ 在doFilter方法里面书写代码逻辑
        System.out.println("webfilter的方式进行过滤");
        //④ 放行
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
b 在配置类里面加上@ServletComponentScan注解(springboot的启动类也是一个配置类)
b.1 加的语法
@ServletComponentScan(filter包的全限定名)
//此注解是可以扫描servlet、监听器、webfilter注解的
b.2 start01完整代码
package com.zlz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

//① 加上@SpringBootApplication注解
@SpringBootApplication
//springboot的启动类也是一个配置类
@ServletComponentScan("com.zlz.filter")
public class Start01 {
    //②通过main快捷键生成main方法
    public static void main(String[] args) {
        //③通过SpringApplication.run去启动它
        SpringApplication.run(Start01.class);
    }
}

c 访问网址,看控制台是否打印输出了
c.1 启动Start01类的main方法并访问一个网址

在这里插入图片描述

c.2 控制台输出结果(代表了过滤器配置成功了)

在这里插入图片描述

4.3.2 使用配置类的形式(一般采用这种)

a 在com包.zlz包下面创建config包,其目录结构如下所示

在这里插入图片描述

b 在filter类下面创建实现filter接口的类(过滤之后的逻辑写这里)
package com.zlz.filter;
import javax.servlet.*;
import java.io.IOException;
//这里就是一个普通的类,不用写webFilter注解,过滤地址在配置类里面写
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //① 在doFilter方法里面书写代码逻辑
        System.out.println("spring boot配置类的方式进行过滤");
        //② 放行
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
c 创建过滤器配置类FilterConfig
package com.zlz.config;

import com.zlz.filter.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration//①加Configuration注解,表示这是一个配置类
//这个随便加在哪个配置类(被@Configuration修饰的类)都是可以的
//@ServletComponentScan("com.zlz.filter")
public class FilterConfig {
    @Bean //在IOC容器中创建组件 等同xml中的bean标签
    //② 创建返回值类型为FilterRegistrationBean<Filter接口实现类的类名>的方法
    public FilterRegistrationBean<MyFilter> te(){
        //③ 建立 FilterRegistrationBean对象
        FilterRegistrationBean fr=new FilterRegistrationBean();
        //④设置过滤器类,直接new Filter接口的实现类进去就行
        fr.setFilter(new MyFilter());
        //⑤ 设置要过滤的地址,等同于之前学的@webFilter注解
        fr.addUrlPatterns("/*");
        //⑥ 设置过滤器执行顺序,数字越小,越先执行
        fr.setOrder(1);
        return fr;
    }

}
d 测试环节
d.1 启动Start01类的main方法并访问一个地址

在这里插入图片描述

d.2 查看控制台输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kaggle 新赛 | GoDaddy 微型企业密度预测

文章目录一、比赛背景和目标1. 背景2. 比赛目标二、提交、时间线和奖项三、代码要求一、比赛背景和目标 1. 背景 美国政策领导人努力发展更具包容性和抗衰退能力的经济体。他们也意识到&#xff0c;随着科技的进步&#xff0c;创业从来没有像今天这样容易。无论是创造一个更合…

【阙值分割】粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】

⛄一、粒子群算法自适应多阈值图像分割简介 理论知识参考&#xff1a;【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 粒子群优化的多阈值图像自分割算法 ⛄二、部分源代码 clc;clear;close all; %% 输入图像&#xff1b; Imag imread(‘24063.jpg’);%29…

【算法】常见的排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序)

目录一.常见排序类型二.排序详解1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序一.常见排序类型 插入排序&#xff1a;插入排序、希尔排序选择排序&#xff1a;简单选择排序、堆排序交换排序&#xff1a;冒泡排序、快速排序归并排序基数排序(又叫桶排序)八万个…

Java项目:新闻推荐管理系统(java+SSM+JavaScript+Ajax+Mysql)

源码获取&#xff1a;俺的博客首页 "资源" 里下载&#xff01; 项目介绍 本项目新闻推荐管理系统&#xff1b; 前台: 登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论 后台&#xff1a; &#xff08;1&#xff09;文件管理&#xff1a;文件列表。 &#x…

3.无重复字符的最长子串

原题&#xff1a;https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 目录 题目描述 题解 代码实现 题目描述 给定一个字符串s&#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "…

微型计算机技术及应用笔记

微型计算机概述 主机系统包括&#xff1a; CPU存储器输入输出接口总线CPU包括&#xff1a; 运算器&#xff08;ALU&#xff09;控制器&#xff08;CU&#xff09;寄存器组&#xff08;Register&#xff09;寄存器&#xff1a;通用寄存器、专用寄存器 控制器由指令寄存器、指令…

攻防世界——Web新手练习区

目录 view_source get_post robots ​backup cookie disabled_button simple_js xff_referer weak_auth command_execution simple_php view_source 知识点&#xff1a; 查看网页源代码的几种方式&#xff1a; 按F12键&#xff0c;点击elements可以查看源代码快捷…

《图解TCP/IP》阅读笔记(第六章 6.1、6.2)—— 传输层的作用、端口号

第六章 TCP与UDP TCP与UDP和赫赫威名&#xff0c;在此前几章已略有耳闻。 TCP提供可靠的通信传输&#xff0c;而UDP则常被用于让广播和细节控制交给应用的通信传输。 首先&#xff0c;我们先来回顾一下传输层的定义。 上一章中提到过&#xff0c;IP中有一个协议字段&#x…

猿如意|程序员的如意神器之【chat GPT】测评。

chat GPT测评1、使用感受2、功能展示3、期待优化地方3.1 猿如意网页版搜索功能3.2 chat GPT3.2.1 测试抢券才能体验3.2.2 聊天体验1、使用感受 首先&#xff0c;需要对猿如意进行点赞。 正如宣传语所说&#xff0c;猿如意&#xff0c;程序员的的如意兵器&#xff0c;这句话&am…

[附源码]Node.js计算机毕业设计个性化旅游线路推荐系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

WordCloud库简介与使用示例

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是WordCloud库简介与使用示例。 一、WordCloud库简介与安装 WordCloud是一款Python的第三方库&#xff0c;可以用于生成词云。词云可以以词语为基本单位&#xff0c;然后根据词语的出现频率确定词语的大小&#xff…

linux red hat 8.0 root密码破解

简介&#xff1a; root用户是linux用户最大权限的用户&#xff0c;如果不慎将其密码忘记是不可直接更改的&#xff0c;只能通过破解的方式来重置root密码。 linux系统的启动过程&#xff1a; 1 开机自检&#xff08;POST&#xff09;&#xff0c;初始化部分硬件 2 搜素可用…

嵌入式从业者应知应会知识点 - 索引

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点。 嵌入式开发需要掌握的知识点非常多&#xff0c;不同的技术方向有不同的知识侧重点&#xff0c;本系列试图整理总结嵌入式开发&#xff08;尤其是软件&a…

毕业设计 stm32车牌识别 - 单片机 嵌入式 物联网 机器视觉

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码5 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长…

juc-3-volatile

目录 1 多线程下变量的不可见性及解决方案 2 不可见性解决方案 2.1 加锁方式解决 2.2 使用volatile关键字 2.3 while(true)速度快调用本地线程内存&#xff0c;加延时即可访问主内存的共享变量 3 volatile不保证原子性以及解决方案 3.1 案例 volatile 验证不是原子性 3.…

详细解析预处理

预处理一.总体概述1.注释去除2.宏替换二.宏定义1.数值宏常量2.字符串宏常量3.用宏定义注释符号4.用宏定义表达式&#xff08;难点&#xff09;1.第一种情况2.第二种情况5.#undef&#xff08;宏的有效范围&#xff09;1.两个问题2.#undef的使用3.一段代码的理解三.条件编译1.#if…

基于nodejs商城系统开发与设计(项目源码+论文设计+ppt答辩+视频录制)

网上购物商城系统以弥补传统购物方式的弊端。在目前的商城里&#xff0c;如果采用网上商城方式&#xff0c;用户购物时就不需要到店里面排队&#xff0c;这样不仅能实时地了解商品的特色&#xff0c;而且方便了顾客&#xff0c;同时也减轻了商城的服务压力。随着WLAN技术的普及…

计算机毕设Python+Vue新文道考研机构在线教学辅导系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

python的panda库读写文件

目录 1.读取excel文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 2.读取cvs文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 3.读取txt文件 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;实例 4.写入文件 &…

【driver.js】基础使用

介绍 driver.js: 轻量级、无依赖性、普通的 JavaScript 引擎&#xff0c;可在整个页面上推动用户的注意力; &#x1f506;突出显示页面上的任何&#xff08;字面上的任何&#xff09;项目✋阻止用户交互&#x1f4e3; 创建功能介绍&#x1f453;为用户添加焦点转移器&#x1f6…