简单谈下Spring、Spring MVC和Spring Boot
Spring是一个开源的轻量级框架,用于构建Java应用程序。它提供了一种全面的编程和配置模型,可以帮助开发人员构建各种类型的应用程序,从简单的控制台应用程序到大型企业级应用程序。Spring框架的主要目标是提高应用程序的可维护性、可扩展性和测试性。
以下是Spring框架的核心特点和组件:
-
控制反转(IoC):IoC是Spring的核心概念之一。它通过将对象的创建和管理委托给Spring容器来实现,而不是由应用程序代码直接创建和管理对象。这种反转的控制权使得应用程序更加灵活、松散耦合,易于测试和维护。Spring的IoC容器负责创建、配置和管理应用程序中的所有对象,开发人员只需要关注对象的使用。
-
依赖注入(DI):DI是IoC的一种实现方式,它通过将依赖关系从应用程序代码中移动到配置文件或注解中来实现。Spring容器负责将依赖关系注入到对象中,使得对象不需要自己创建或查找依赖。这种机制降低了组件之间的耦合度,使得组件更容易测试和重用。
-
面向切面编程(AOP):Spring支持AOP,允许开发人员定义横切关注点(如日志、事务管理等)并将它们应用到应用程序的多个组件中,而不是将这些关注点嵌入到每个组件中。这提高了代码的模块性和可维护性。
-
模块化:Spring框架是模块化的,可以根据需要选择使用的模块。核心模块包括核心容器、AOP和数据访问/集成等。此外,Spring还支持各种扩展模块,如Spring Security(安全性)、Spring Batch(批处理)和Spring Cloud(微服务)等。
-
数据访问与集成:Spring提供了广泛的数据访问和集成选项,包括对JDBC、Hibernate、JPA、JMS、REST、SOAP等的支持。这使得与各种数据源和外部服务的集成变得容易。
-
事务管理:Spring框架提供了强大的事务管理支持,可以在编程模型或声明性模型中管理事务。开发人员可以使用注解或XML配置来定义事务规则,从而实现数据一致性和事务的管理。
-
简化开发:Spring框架设计的目标之一是简化Java应用程序的开发。它提供了大量的实用工具和类,用于处理常见的开发任务,例如数据库访问、验证、缓存、消息传递等。
以下是一个简单的Spring示例,演示了如何使用Spring的IoC容器和依赖注入:
// 定义一个简单的服务接口
public interface GreetingService {String greet();
}// 实现服务接口
public class GreetingServiceImpl implements GreetingService {@Overridepublic String greet() {return "Hello, Spring!";}
}// Spring配置文件(applicationContext.xml)
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 声明一个GreetingService的bean --><bean id="greetingService" class="com.example.GreetingServiceImpl" />
</beans>// 应用程序入口类
public class MyApp {public static void main(String[] args) {// 创建Spring容器并加载配置ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 从容器中获取GreetingService对象GreetingService service = context.getBean("greetingService", GreetingService.class);// 调用服务方法String message = service.greet();// 打印结果System.out.println(message);}
}
在这个示例中,Spring容器负责创建GreetingService
对象,并注入到MyApp
类中,使得MyApp
类不需要直接创建GreetingService
对象。这是一个简单的例子,展示了Spring的IoC和DI特性。在实际应用中,Spring可以用于更复杂的场景,如Web应用程序、企业集成、微服务架构等。
Spring MVC是Spring框架的一个模块,用于构建Web应用程序。它提供了一种基于模型-视图-控制器(MVC)架构的方式来开发Web应用,帮助开发人员更好地组织和管理Web应用的各个部分。Spring MVC的主要目标是分离应用的关注点,使得应用程序的不同部分可以独立开发、测试和维护。
以下是Spring MVC的核心特点和组件:
-
MVC架构:Spring MVC采用了经典的MVC架构,将应用程序划分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。
-
模型(Model):模型代表应用程序的数据和业务逻辑。它负责处理数据的存储、检索和操作。模型通常是一个POJO(普通的Java对象)。
-
视图(View):视图负责呈现模型的数据给用户。它通常是一个JSP、Thymeleaf、FreeMarker等模板引擎,或者是前端框架(如Angular、React等)。
-
控制器(Controller):控制器负责接受用户的请求、处理请求并调用适当的模型和视图来响应请求。它通常是一个Java类,使用注解或XML配置来映射URL和处理请求。
-
-
分离关注点:Spring MVC通过将不同关注点分离开来,使得开发人员可以独立开发、测试和维护每个组件。这提高了代码的可维护性和可扩展性。
-
强大的URL映射:Spring MVC支持灵活的URL映射,可以将URL映射到特定的控制器方法,使得处理不同URL的请求变得简单。
-
数据绑定:Spring MVC支持将HTTP请求参数绑定到控制器方法的方法参数中,从而方便地获取用户提交的数据。
-
验证和数据转换:Spring MVC提供了数据验证和转换的机制,可以方便地验证用户输入的数据并将其转换为模型对象。
-
视图解析器:Spring MVC支持视图解析器,可以根据逻辑视图名称解析出实际的视图对象。
-
国际化和本地化:Spring MVC支持国际化和本地化,使得应用程序可以根据用户的语言和区域设置提供不同的内容。
-
拦截器:Spring MVC允许开发人员定义拦截器来对请求进行前置和后置处理,例如身份验证、日志记录等。
@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello"; // 返回逻辑视图名称}
}
在上面的示例中,MyController
类包含了一个处理/hello
路径的GET请求的方法,并返回一个逻辑视图名称"hello"。
视图负责将模型数据插入到HTML或其他格式的响应中。以下是一个使用Thymeleaf模板引擎的视图示例:
<!-- src/main/resources/templates/hello.html -->
<!DOCTYPE html>
<html>
<head><title>Hello Page</title>
</head>
<body><h1>Hello, ${name}!</h1>
</body>
</html>
Spring MVC使用Model
对象(通常是Model
或ModelMap
的实例)来存储模型数据。以下是一个控制器方法,演示如何将数据添加到模型:
@Controller
public class MyController {@GetMapping("/hello")public String hello(Model model) {model.addAttribute("name", "John");return "hello";}
}
在上面的示例中,name
属性被添加到模型中,并将在视图中使用。
以下是一个配置视图解析器的示例:
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}
在上面的示例中,MvcConfig
类配置了InternalResourceViewResolver
,用于解析JSP视图。
请求映射和参数绑定:
Spring MVC允许您轻松地将HTTP请求映射到控制器方法,并从请求中提取参数。以下是一些示例:
-
请求映射:使用
@RequestMapping
注解或其缩写注解(如@GetMapping
、@PostMapping
)来映射请求到控制器方法。例如:
@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello";}
}
-
在上面的示例中,
@GetMapping
注解将GET请求映射到/hello
路径的hello()
方法。 -
路径变量:Spring MVC允许您从URL路径中提取变量,并将它们作为方法参数传递。例如,如果URL是
/users/{userId}
,则可以这样定义控制器方法:
@Controller
public class UserController {@GetMapping("/users/{userId}")public String getUserProfile(@PathVariable Long userId, Model model) {// 根据userId获取用户数据User user = userService.getUserById(userId);model.addAttribute("user", user);return "userProfile";}
}
-
上面的示例中,
@PathVariable
注解用于将userId
从URL路径中提取出来,并将其传递给getUserProfile
方法。 -
请求参数绑定:Spring MVC支持将HTTP请求参数绑定到控制器方法的参数。例如,以下方法将
name
参数绑定到控制器方法:
@Controller
public class MyController {@GetMapping("/greet")public String greet(@RequestParam String name, Model model) {model.addAttribute("message", "Hello, " + name + "!");return "greet";}
}
-
在上面的示例中,
@RequestParam
注解用于将HTTP请求中的name
参数绑定到name
方法参数上。
数据验证和错误处理:
Spring MVC支持数据验证和全局错误处理。您可以使用JSR 303验证注解来验证表单数据,并定义全局错误处理程序来处理应用程序中的错误。
-
数据验证:使用JSR 303验证注解(如
@NotNull
、@Size
、@Email
等)来验证表单数据。例如:
public class User {@NotNull@Size(min = 5, max = 50)private String username;@Emailprivate String email;// 其他属性和方法
}
-
在上面的示例中,
@NotNull
和@Size
注解用于验证username
字段,@Email
用于验证email
字段。 -
全局错误处理:定义一个全局错误处理器(如
@ControllerAdvice
注解的类),用于处理应用程序中的异常和错误。例如:
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public String handleGlobalException(Exception ex, Model model) {model.addAttribute("error", ex.getMessage());return "errorPage";}
}
-
在上面的示例中,
@ExceptionHandler
注解用于处理所有异常,并将错误消息添加到模型中,然后返回一个错误页面。
文件上传和下载:
Spring MVC还支持文件上传和下载。以下是一些示例:
-
文件上传:您可以使用
MultipartFile
类型的方法参数来处理文件上传。例如:
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {// 处理上传的文件// ...return "uploadSuccess";
}
2.文件下载:您可以使用ResponseEntity
来发送文件作为响应。例如:
@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile() throws IOException {// 读取文件内容byte[] content = Files.readAllBytes(Paths.get("path/to/file.txt"));HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);headers.setContentDispositionFormData("attachment", "file.txt");return new ResponseEntity<>(content, headers, HttpStatus.OK);
}
Spring MVC还有许多其他功能,如拦截器、国际化、RESTful支持等。要深入了解Spring MVC,建议查阅官方文档以及相关教程和示例代码。
Spring Boot是一个用于创建独立的、基于Spring的生产级别应用程序的框架。它旨在简化Spring应用程序的开发和部署,提供了许多开箱即用的功能和约定,使得构建应用程序变得更加快速和容易。
主要特点:
-
自动配置(Auto-Configuration):Spring Boot通过分析项目的依赖关系,自动配置Spring应用程序的各个组件。您无需手动配置很多内容,例如数据源、Web服务器、日志等。示例:
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
-
在上面的示例中,
@SpringBootApplication
注解启用了Spring Boot的自动配置。 -
起步依赖(Starter Dependencies):Spring Boot提供了一系列的"起步依赖",它们包含了预配置的依赖关系,可用于快速启动不同类型的应用程序。例如,
spring-boot-starter-web
用于创建Web应用程序。示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
嵌入式Web服务器:Spring Boot内置了多个嵌入式Web服务器(如Tomcat、Jetty、Undertow),无需外部容器即可运行Web应用程序。示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
外部化配置(Externalized Configuration):Spring Boot支持将配置信息从代码中分离,可以使用属性文件、YAML文件、环境变量等来配置应用程序。示例:
server:port: 8080
自动化Spring Bean配置:Spring Boot通过@ComponentScan
和@SpringBootApplication
等注解自动扫描并注册Spring Bean。示例:
@Service
public class MyService {// ...
}
Spring Boot是一个用于创建独立的、基于Spring的生产级别应用程序的框架。它旨在简化Spring应用程序的开发和部署,提供了许多开箱即用的功能和约定,使得构建应用程序变得更加快速和容易。
下面是Spring Boot的一些关键特点和示例代码,以帮助您更详细地了解Spring Boot。
主要特点:
-
自动配置(Auto-Configuration):Spring Boot通过分析项目的依赖关系,自动配置Spring应用程序的各个组件。您无需手动配置很多内容,例如数据源、Web服务器、日志等。示例:
javaCopy code
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
在上面的示例中,
@SpringBootApplication
注解启用了Spring Boot的自动配置。 -
起步依赖(Starter Dependencies):Spring Boot提供了一系列的"起步依赖",它们包含了预配置的依赖关系,可用于快速启动不同类型的应用程序。例如,
spring-boot-starter-web
用于创建Web应用程序。示例:xmlCopy code
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
-
嵌入式Web服务器:Spring Boot内置了多个嵌入式Web服务器(如Tomcat、Jetty、Undertow),无需外部容器即可运行Web应用程序。示例:
xmlCopy code
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency>
-
外部化配置(Externalized Configuration):Spring Boot支持将配置信息从代码中分离,可以使用属性文件、YAML文件、环境变量等来配置应用程序。示例:
yamlCopy code
server: port: 8080
-
自动化Spring Bean配置:Spring Boot通过
@ComponentScan
和@SpringBootApplication
等注解自动扫描并注册Spring Bean。示例:javaCopy code
@Service public class MyService { // ... }
-
生产就绪功能:Spring Boot包括用于监控、管理和维护生产应用程序的功能,例如健康检查、度量指标、远程Shell等。
示例代码:
以下是一个简单的Spring Boot应用程序示例,演示了如何创建一个基本的RESTful Web服务:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}@RestController
@RequestMapping("/api")
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
在上面的示例中,我们定义了一个Spring Boot应用程序(使用@SpringBootApplication
注解),并创建了一个RESTful控制器(使用@RestController
和@GetMapping
注解),该控制器响应/api/hello
路径的GET请求。
更多资源:
要更详细地了解Spring Boot,您可以查阅官方文档以及相关教程和示例代码。以下是一些推荐的资源:
- Spring Boot官方文档
- Spring Boot起步依赖
- Spring Boot示例项目
- Spring Boot教程
这些资源将帮助您更深入地了解Spring Boot并开始构建自己的应用程序。
相关文章:

简单谈下Spring、Spring MVC和Spring Boot
Spring是一个开源的轻量级框架,用于构建Java应用程序。它提供了一种全面的编程和配置模型,可以帮助开发人员构建各种类型的应用程序,从简单的控制台应用程序到大型企业级应用程序。Spring框架的主要目标是提高应用程序的可维护性、可扩展性和…...

利用python进行视频下载并界面播放快速下载素材
工具:python designer(python自带):UI界面设计工具 VLC:视频播放工具 需要的库如下: import os,platform os.environ[PYTHON_VLC_MODULE_PATH] "./vlc-3.0.14" import vlc from 脚本 import Player from …...

[C++][pcl]pcl安装后测试代码3
测试环境: vs2019 pcl1.12.1 代码: #include<iostream> #include <thread>#include <pcl/common/common_headers.h> #include <pcl/features/normal_3d.h> #include <pcl/io/pcd_io.h> #include <pcl/visualizatio…...

在WSL下使用makefile运行modelsim进行混合编译
modelsim的图像界面加载缓慢,实际上modelsim可以在纯命令行环境下仿真,使用-c参数:vsim -c。可以在WSL下用makefile运行Windows下的modelsim: HDL_CODE . HDL_CODE ../../rtl/ MODELSIM_ROOT : /mnt/e/exe/modeltech64_10.4/win…...

idea 常用插件和常用快捷键 - 记录
idea 常用插件 记得下载插件完成后,点击 Apply 和 OK Alibaba Java Coding Guidelines 作用:使用该插件可以,自动提示相关的语法格式问题,格式参考 阿里巴巴代码规范 详情链接: 代码规范之Alibaba Java Coding G…...

IDEA报错:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found
问题: 使用IDEA新建spring boot项目,报错如下: Plugin org.springframework.boot:spring-boot-maven-plugin: not found解决办法: 1.在本地maven仓库中找到spring-boot-maven-plugin的版本号 2.在pom.xml文件中添加对应的版本…...

C++——Vector:push_back和emplace_back的区别,测试写入1GB大数据时的性能差距
什么是emplace_back emplace_back是C11引入的STL容器成员函数。emplace操作只执行构造而不执行拷贝构造。 如何理解上面这句话?先来看一个场景。 class test { public:test(){}test(int i){ std::cout << "test(int i)" << std::endl; }tes…...

C/C++/QT/Python/MATLAB获取文件行数的示例
1. C获取文件行数 #include <stdio.h>int main() {FILE *file fopen("path/to/your/file.txt", "r");if (file NULL) {printf("Failed to open the file!\n");return 0;}int lineCount 0;char ch;while ((ch fgetc(file)) ! EOF) {if…...

mysql的binlog參數詳解
mysql的binlog參數詳解 1. expire_logs_days expire_logs_days:這個參數用於設置binlog日誌文件的過期時間。默認情況下,binlog文件永不過期。如果將其設置為一個正整數值,則表示binlog文件在指定天數後會被自動刪除。 max_binlog_size m…...

【SpringSecurity】九、Base64与JWT
文章目录 1、base64编码2、Base64Url3、JWT的产生背景4、JWT介绍5、JWT组成5.1 Header5.2 Payload5.3 Signature 6、JWT的使用方式7、JWT的几个特点 1、base64编码 base64是一种编码方式,不是加密方式。 所谓Base64,就是说选出64个字符:小写…...

Python的io模块
io 模块提供了 Python 用于处理各种 I/O 类型的主要工具。三种主要的 I/O类型分别为: 文本 I/O, 二进制 I/O 和 原始 I/O。 io.open() 是内置的 open() 函数的别名. 语法: open(file,moder,buffering-1,encodingNone,errorsNone,newlineNone,closefdTrue,openerN…...

CSS---flex布局
主要记录flex布局的要点以及实例 flex flex父标签的6个属性flex-direction: flex布局的方向flex-wrap: 是否可以换行flex-flow: flex-direction 和 flex-wrap 一起写justify-content:横向对齐方式align-items: 纵向对齐方式align-content: 有换行情况下的纵向对齐方…...

java线程和go协程
一、线程的实现 线程的实现方式主要有三种:内核线程实现、用户线程实现、用户线程加轻量级进程混合实现。因为自己只对java的线程比较熟悉一点,所以主要针对java线程和go的协程之间进行一个对比。 线程模型主要有三种:1、内核级别线程&#…...

JAVA 时间戳
时间戳(Timestamp)是一个表示特定时间点的数值,通常指的是自某个固定的起始时间(如1970年1月1日00:00:00 UTC)以来经过的秒数或毫秒数。 在 Java 中,可以使用 System.currentTimeMillis() 方法获取当前的时…...

层次分析法(matlab实现)
1.层次分析法(AHP) 在决策理论中,层次分析法是一种以数学和心理学为基础,组织和分析复杂决策的结构化技术,它代表了一种量化决策标准权重的准确方法,通过成对比较,利用个别专家的经验来估计因素…...

python selenium 自动化登录页面
去掉自动化标识,绕过js,绕过ip import time from selenium import webdriver from selenium.webdriver.chrome.options import Options# 去掉自动化标识,绕过js option Options() option.add_experimental_option(excludeSwitches, [enable…...

【Linux】高级IO --- 多路转接,select,poll,epoll
所有通过捷径所获取的快乐,无论是金钱、性还是名望,最终都会给自己带来痛苦 文章目录 一、五种IO模型1.什么是高效的IO?(降低等待的时间比重)2.有哪些IO模型?哪些模型是高效的?3.五种IO模型的特…...

anaconda navigator打不开,一直在loading画面
anaconda navigator打不开,一直在loading画面。百度解决方法,用网上的方法在命令窗口里运行conda update anaconda结果一直显示 solving environment卡在那里。又尝试用管理员身份运行还是不行,打开后出现There in aninstance of Anaconda Na…...

【Java基础】深入理解反射、反射的应用(工厂模式、代理模式)
文章目录 1. Java反射机制是什么?1.2 Java反射例子 2. Java反射机制中获取Class的三种方式及区别?3. Java反射机制的应用场景有哪些?3.1. 优化静态工厂模式(解耦)3.1.1 优化前(工厂类和产品类耦合ÿ…...

VUE 项目 nginx部署
server {listen 80; # 监听的端口号server_name 129.204.189.149; # 服务器的ip或者域名#charset koi8-r;#access_log logs/host.access.log main;# 前端服务反向代理配置location / {proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header X-Real-…...

Hashtable和HashMap、ConcurrentHashMap 之间的区别
Hashtable和HashMap的区别 HashMap和Hashtable都是哈希表数据结构,但是Hashtable是线程安全的,HashMap是线程不安全的 Hashtable实现线程安全就是简单的把关键方法都加上了synchronized关键字 直接在方法上添加synchronized相当于针对this对象࿰…...

包管理工具--》npm的配置及使用(二)
在阅读本篇文章前请先阅读包管理工具--》npm的配置及使用(一) 目录 🌟语义版本 避免还原的差异 npm的差异版本处理 🌟npm 脚本 (npm scripts) 🌟运行环境配置 在node中读取package.json …...

【Linux】多线程2——线程互斥与同步/多线程应用
文章目录 1. 线程互斥1.1 问题引入1.2 线程互斥的相关概念1.3 互斥量mutex1.4 互斥量实现原理1.5 死锁 2. 线程安全和可重入函数3. 线程同步3.1 同步概念3.2 条件变量 4. 生产消费模型4.1 基于阻塞队列的cp模型4.2 基于环形队列的cp模型POSIX信号量 5. 线程池5.1 互斥量RAII版本…...

Python中的函数式编程是什么?
Python中的函数式编程是一种编程范式,它强调使用纯函数和避免可变状态来构建程序。函数式编程的核心思想是将计算视为函数的求值,而不是通过改变状态来实现。在函数式编程中,函数被视为一等公民,可以作为参数传递给其他函数&#…...

8月《中国数据库行业分析报告》已发布,聚焦数据仓库、首发【全球数据仓库产业图谱】
为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…...

TikTok Shop|如何成为定邀卖家?
TikTok在商品售卖资质和商家资质上做了很多限制,比如我们熟知的珠宝类目,今天我们结合TikTok Shop规则中心8月30号发布的《如何申请成为“定邀”卖家》和关于“定邀”商品的政策进行分析,看看如何成为“定邀”卖家。 定邀商品/类目有哪些&am…...

C++二级题目6
数字放大 #include<iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<cmath> #include<bits/stdc.h> int a[2000][2000]; int b[2000]; char c[2000]; long long n; using namespace std; int main() {int x;…...

南方科技大学博士研究生奖助学金,深圳大学
目录 南方科技大学 中南大学 南京大学 厦门大学 苏州大学 中南财经政法大学 深圳大学 南方科技大学 https://ocean.sustech.edu.cn/ocean/public/upload/download/3/2.pdf 南方科技大学的在读研究生,每人每年都会得到40000元的补助,这40000块钱分…...

QT 使用信号与槽实现界面跳转
一、创建一个新的页面 1 > 在原有工程上新建一个页面 2 > 选择Qt - Qt 设计师界面类 - choose 3 > 选择Widget模板 - 下一步 4 > 输入自定义类名 - 下一步 会自动生成其同名的.h .cpp .ui文件 5 > 最终效果 Headers存放.h文件 Soueces存放.cpp文件 Forms存放.u…...

Burp插件HaE与Authz用法
HaE与Authz均为BurpSuite插件生态的一员,两者搭配可以避免“越权”、“未授权”两类漏洞的重复测试行为。(适用于业务繁杂,系统模块功能多的场景) 两个插件都可以在store里安装 安装完后,点击Filter Settings勾选Sho…...