Spring MVC入门必读:注解、参数传递、返回值和页面跳转

news2024/11/26 22:44:42

一、常用注解

1.1.@RequestMapping

作用:用于映射请求路径与处理请求的方法之间的关系,可以用在类或方法上 。

  • 标注在方法上

用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法

@Controller
public class HelloController {
​
    @RequestMapping("/requestTest")
    public String requestTest(){
        return "success";
    }
}

此时请求映射的请求路径为:

http://localhost:8080/springmvc01/requestTest

springmvc01表示项目名

标注在类和方法上

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

注意:当你在类上添加RequestMapping注解后,如果要请求映射,就意味着请求要先映射到标注类的位置,然后再映射到该类的方法上

@Controller
@RequestMapping("/hello")
public class HelloController {
​
    @RequestMapping("/requestTest")
    public String requestTest(){
        return "success";
    }
}

此时请求映射的请求路径为:

http://localhost:8080/springmvc01/hello/requestTest

springmvc01表示项目名

参数  

  • value  

 @RequestMapping 的 value 属性必须设值; @RequestMapping 的 value 属性是通过当前请求的请求地址来匹配请求; 从源码中可以看到value属性是一个字符串类型的数组,因此说明可以将多个请求映射到一个方法上,只需要给 value 来指定一个包含多个路径的数组。

  • method 

   @RequestMapping的method属性是通过当前请求的请求方式来匹配请求; 浏览器向服务器发送请求,请求方式有很多GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以使用 method 属性来约束请求方式。

  • headers  

 @RequestMapping的headers属性是通过当前请求的请求头信息来匹配请求; @RequestMapping的headers属性是一个字符串类型的数组,可以通过下面四种表达是来设置匹配关系 例如: “header”:要求请求映射的请求必须为包含 header的请求头信息 “!header”:要求请求映射的请求必须为不包含 header的请求头信息 “header=value”:要求请求映射的请求必须为包含 header的请求头信息,并且header的值必须为value “header!=value”:要求请求映射的请求必须为包含 header的请求头信息,并且header的值必须不是value

  • params 

   @RequestMapping的params属性是通过当前请求的请求参数来匹配请求; @RequestMapping的params属性是一个字符串类型的数组,可以通过下面四种表达是来设置匹配关系 例如: “param”:要求请求映射的请求必须为包含 param的请求参数 “!param”:要求请求映射的请求是不能包含param的请求参数 “param=value”:要求请求映射的请求必须包含 param 的请求参数,且 param 参数的值必须为 value “param!=value”: 要求请求映射的请求是必须包含 param 的请求参数,其值不能为 value。
 

示例一:@RequestMapping的params属性 

@RequestMapping(value = "/test",params = "username")
public String test(){
    return "success";
}

注意:我们设置了params属性,就意味着该请求映射的请求必须包含username才能够请求成功。

示例二:@RequestMapping的headers属性

@RequestMapping(value = "/test",headers = "Host = localhost:8081")
public String test(){
    return "success";
}

注意:如果当前请求不满足headers属性,此时页面就会显示404错误,即资源未找

  • @GetMapping:处理get方式请求的映射
  • @PostMapping:处理post方式请求的映射
  • @PutMapping:处理put方式请求的映射
  • @DeleteMapping:处理delete方式请求的映射
  • @GetMapping就相当于@RequestMapping(method=RequestMethod.GET),它会将get映射到特定的方法上。
     

1.2.@RequestParam

作用:用于获取请求参数的值,并将其绑定到方法的参数上。

参数    说明

  • value  

 请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。

  • required 

   该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

  • defaultValue  

 参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}"

@RequestMapping("/queryBooks")
public List<Book> queryBooks(
    @RequestParam(required = false,defaultValue = "0",value="page") int page,
    @RequestParam(required = false,defaultValue = "10",value = "rows") int rows){
        return bookService.queryBooks(page,rows);
}

1.3.@RequestBody

作用:用于将请求体中的JSON数据绑定到方法的参数上。

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

总结来说就是

  • 一个请求:只有一个@RequestBody;

  • 一个请求:可以有多个@RequestParam。

@RequestMapping("/hello")
public String toHello1(@RequestBody Book book){
    log.info(">>>> 使用@RequestBody传递JSON格式的参数:{}", JSON.toJSONString(book));
    return "index";
}

@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
 

1.4.@RequestHeader

作用:用于获取请求头中指定的参数值。

如果想要获取所有的请求头信息,可以使用 Map<String,String>、MultiValueMap<String,String>、HttpHeaders 这三个 Map 中的任何一个封装所有请求头的 name 和 value。

参数 

  • name  

 name 和 value 互为别名,当只有一个参数时,可以省略 value,直接("xxx") 就可以了

  • value  

 name 和 value 互为别名,当只有一个参数时,可以省略 value,直接("xxx") 就可以了

  • required  

 默认情况下,如果请求头中缺少了指定的 name,那么将会报错。 如果没有添加required = false,当请求头中没有这个zking请求头时就会报错。

  • defaultValue

    如果请求头中缺少了指定的 name ,那么会报错,可以使用 defaultValue 这个属性指定默认值,就可以避免报错 ;如果请求头缺少指定 name ,该属性设置的值将会作为默认值,如果该属性不设置值,它有自己的默认值 DEFAULT_NONE

@GetMapping("/headParams")
public Map userInfo(
    @RequestHeader(value = "zking",defaultValue = "hello zking") String username,
    // 将请求头中 name=Accept-Encoding 赋值给形参 encoding
    @RequestHeader("Accept-Encoding") String encoding,
    // 将请求头中 name=Host 赋值给形参 host
    @RequestHeader("Host") String host,
    // 将所有请求头的 name 和 value 封装到 Map 集合 headsMap 中
    @RequestHeader Map<String,String> headsMap) {
        Map map = new HashMap<String, Object>();
        map.put("username",username);
        map.put("Accept-Encoding",encoding);
        map.put("Host",host);
        map.put("headsMap",headsMap);
​
        return map;
}

由于请求头中不存在 name=zking 这个信息,所以如果只用 value=zking 会抛出异常。

解决方案:

1、required 的默认值为 true ,也就是请求头中没有 name=zking 会报错,将其值改为 false,即没有该头信息也不报错

@RequestHeader(value = "zking",required = "false") String username

2、不修改 required=true 这个默认值,当头信息中不包含 name=zking ,给它一个默认值 hello zking

@RequestHeader(value = "zking",defaultValue = "hello zking") String username

1.5.@PathVariable

作用:用于获取URL路径中的参数值,并将其绑定到方法的参数上。

即当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

//@PathVariable可以用来映射URL中的占位符到目标方法的参数中
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id)
{
    System.out.println("testPathVariable:"+id);
    return SUCCESS;
}

二、参数传递

SLF4J是一个简单的日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。 

SLF4J的作用是提供了一种抽象层,使得开发人员可以使用任何他们喜欢的日志框架,而不必关心它们之间的差异。这样可以使开发人员更专注于编写代码,而不是处理日志记录的细节。  

在实际运用中,SLF4J通常用于将日志记录从应用程序代码中分离出来,并将其委托给专门的日志记录器。这样可以使得应用程序更易于维护和扩展,并且可以提高性能和可靠性。  

pom.xml

<log4j2.version>2.9.1</log4j2.version>
<log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
<slf4j.version>1.7.13</slf4j.version>
 
//-------------------------------------------------
 
<!--4.log日志相关依赖-->
 
<!-- log4j2日志相关依赖 -->
<!-- log配置:Log4j2 + Slf4j -->
<!-- slf4j核心包-->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>${slf4j.version}</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
	<version>${slf4j.version}</version>
	<scope>runtime</scope>
</dependency>
 
<!--核心log4j2jar包-->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<!--用于与slf4j保持桥接-->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要-->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-web</artifactId>
	<version>${log4j2.version}</version>
	<scope>runtime</scope>
</dependency>
 
<!--需要使用log4j2的AsyncLogger需要包含disruptor-->
<dependency>
	<groupId>com.lmax</groupId>
	<artifactId>disruptor</artifactId>
	<version>${log4j2.disruptor.version}</version>
</dependency>

2.1.基础类型+String

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
    @RequestMapping("/list")
    public String list(String name,Integer age){
        log.info("基础类型+String➡name:{},age:{}",name,age);
        return "hello";
    }
 
}

此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list?name=李文昊&age=18

2.2.复杂类型

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
    @RequestMapping("/list01")
    public String list01(Book book, HttpServletRequest req){
        log.info("复杂类型:bid:{},bname:{}",
                req.getParameter("bid"),
                req.getParameter("bname"));
        log.info("book:{}",book.toString());
        return "hello";
    }
 
}

此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list01?bid=01&bname=圣墟

2.3.@RequestParam

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
    @RequestMapping("/list02")
    public String list02(
            @RequestParam(required = false) String name,
            @RequestParam Integer age) {
        log.info("@RequestParam注解传递参数name:{},age:{}",name,age);
        return "hello";
    }
 
 
}

此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list02?name=李文昊&age=18

如果我们少传递一个age结果会是怎么样的呢 ?

http://localhost:8080/Spring_MyBatis/csdn/list02?name=李文昊

就会提示我们少了一个参数

因为被@RequestParam注解的参数required默认为true表示请求中一定要传入对应的参数,否则会报404错误如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

2.4.@PathVariable

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
  @RequestMapping("/list03/{id}")
    public String list03(@PathVariable("id") Integer id) {
        log.info("@PathVariable:  id{}",id);
        return "hello";
    }
 
}

此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list03/7

2.5.@RequestBody

讲解@RequestBody之前,将大家推荐postman或者apipost/eolink等工具发送请求数据。

这些工具可以帮助您模拟发送请求和接收响应,以便更好地理解@RequestBody参数的含义和使用方法。

 Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
 @RequestMapping("/list04")
    public String list04(Map map) {
        log.info("没有注解:  Map:{}",map);
        return "hello";
    }
 
    @RequestMapping("/list05")
    public String list05(@RequestBody Map map) {
        log.info("@ResponseBody:  Map:{}",map);
        return "hello";
    }
 
}

此时请求映射的请求路径为: 

http://localhost:8080/Spring_MyBatis/csdn/list04

测试没有注解的 

 结果是没有获取到参数

测试有注解的

 可以获取到参数结果

2.6.@RequestHeader

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
  @RequestMapping("/list06")
    public String list06(@RequestHeader String jwt) {
        log.info("@RequestHeader:  jwt:{}",jwt);
        return "hello";
    }
 
 
}

此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list06

三、返回值

为了方便模拟效果,借助ResponseUtil工具类,ResponseUtil类提供了一种方便的方式来将对象以文本或JSON格式写入HTTP响应流中,以便在Web应用程序中向客户端返回数据。

package com.liwen.util;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
 
public class ResponseUtil {
 
	public static void write(HttpServletResponse response,Object o)throws Exception{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		out.println(o.toString());
		out.flush();
		out.close();
	}
 
	public static void writeJson(HttpServletResponse response,Object o)throws Exception{
		ObjectMapper om = new ObjectMapper();
//		om.writeValueAsString(o)代表了json串
		write(response, om.writeValueAsString(o));
	}
}

 pom.xml依赖

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.4</version> <!-- 请根据您的需求选择合适的版本 -->
    </dependency>

3.1.void

处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
   @RequestMapping("/return01")
    public void return01(HttpServletResponse resp){
    Map<String,Object> map=new HashMap<>();
    map.put("code",200);
    map.put("msg","成功添加。。。");
        try {
            ResponseUtil.writeJson(resp,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
}

3.2.String

通过http://localhost:8080/Spring_MyBatis/csdn/return02访问请求方法,并经过视图解析器跳转指定页面。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
   @RequestMapping("/return02")
    public String return02( ){
       return "hello";
    }
 
 
}

网页效果:

3.3.String+Model

通过http://localhost:8080/Spring_MyBatis/csdn/return03访问请求方法,并经过视图解析器跳转指定页面。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
   @RequestMapping("/return03")
    public String return03(Model Model,HttpServletRequest req){
        Model.addAttribute("name","Java文昊");
        req.setAttribute("age",18);
        return "hello";
    }
 
 
}

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户名:${name}
年龄:${age}
</body>
</html>

3.4.ModelAndView

 Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 
   @RequestMapping("/return04")
    public ModelAndView return04(){
       ModelAndView mv=new ModelAndView();
       mv.addObject("name","湖南彭于晏-文昊桑");
        mv.addObject("age",18);
       mv.setViewName("hello");
        return mv;
    }
 
 
}

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<br>用户名:${name}
年龄:${age}
</body>
</html>

四、页面跳转

转发(forward:path)和重定向(redirect:path)这两种跳转方式将会绕开视图解析器的前缀后缀;还有就是如果是在同一controller中则不用使用"/"从根目录开始,而如果是在不同的controller则一定要从根目录开始。

4.1.转发forward

  • 当前类

Controller编写:

//  转发到当前类
    @RequestMapping("/forward01")
    public String forward01(){
        return "forward:return02";
    }
 
 
@RequestMapping("/return02")
    public String return02( ){
        return "hello";
    }

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

用户名:${name}
年龄:${age}
</body>
</html>
  • 其他类

Controller编写:

//  转发到其他类
    @RequestMapping("/forward02")
    public String forward02(){
        return "forward:/hello/requestTest";
    }
 
 
 
 
@Controller
@RequestMapping("/hello")
public class hello {
 
    @RequestMapping("/requestTest")
    public String Hello(){
        return "text";
    }
 
}

JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
你好我是其他类跳转过来的
</body>
</html>

4.2.重定向redirect

  •  当前类

Controller编写:

 //  重定向到当前类
    @RequestMapping("/redirect01")
    public String redirect01(){
        return "redirect:return02";
    }
 
@RequestMapping("/return02")
    public String return02( ){
        return "hello";
    }

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

用户名:${name}
年龄:${age}
</body>
</html>
  • 其他类

 Controller编写: 

 //  重定向到其他类
    @RequestMapping("/redirect02")
    public String redirect02(){
        return "redirect:/hello/requestTest";
    }
 
 
 
 
@Controller
@RequestMapping("/hello")
public class hello {
 
    @RequestMapping("/requestTest")
    public String Hello(){
        return "text";
    }
 
}

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
你好我是其他类跳转过来的
</body>
</html>

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

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

相关文章

pytorch-神经网络-手写数字分类任务

Mnist分类任务&#xff1a; 网络基本构建与训练方法&#xff0c;常用函数解析 torch.nn.functional模块 nn.Module模块 读取Mnist数据集 会自动进行下载 %matplotlib inlinefrom pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / &…

RESTful风格介绍

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;HTTP、RESTFul、请求☀️每日 一言&#xff1a;我已经习惯这样的失望了——《英雄联盟》奥恩 一、前言 为了更好地设计和构建分布式系统和网络应用&#xff0c;诞生了RESTful 风格&#xff0c;它…

后端SpringBoot+前端Vue前后端分离的项目(二)

前言&#xff1a;完成一个列表&#xff0c;实现表头的切换&#xff0c;字段的筛选&#xff0c;排序&#xff0c;分页功能。 目录 一、数据库表的设计 ​编辑二、后端实现 环境配置 model层 mapper层 service层 service层单元测试 controller层 三、前端实现 interface接…

Acwing算法心得——现代艺术(统计遍历)

大家好&#xff0c;我是晴天学长&#xff0c;先用两个一维数组维护数据&#xff0c;再统计遍历二维数组&#xff0c;需要的小伙伴请自取哦&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;现代艺术 2) .算法思路 现代艺术 1.两个数组维护行和列 2.遍历数组…

命名空间的详讲

本篇文章旨在讲解C中命名空间的概念以及其相关注意事项&#xff01; C的介绍 C作为C语言的衍生&#xff0c;其对C语言中的一些缺陷进行了一些的补充和优化。但是C也对C语言具有兼容性&#xff01; 本文旨在讲解C对C语言中当声明的变量与库函数的一些标识符&#xff0c;关键字…

2023年MySQL实战核心技术第二篇

目录 五 . 日志系统&#xff1a;一条SQL更新语句是如何执行的&#xff1f; 5.1 解释 5.2 重要的日志模块&#xff1a;redo log 5.2.1 解释 5.2.2 WAL&#xff08;Write-Ahead Logging&#xff09; 5.2.3 crash-safe。 5.3 重要的日志模块&#xff1a;binlog 5.3 .1 为什么会有…

【FPGA】通俗理解从VGA显示到HDMI显示

注&#xff1a;大部分参考内容来自“征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10&#xff08;上&#xff09;” 贴个下载地址&#xff1a; 野火FPGA-Altera-EP4CE10征途开发板_核心板 — 野火产品资料下载中心 文档 hdmi显示器驱动设计与验证 — …

10.1 直流电源的组成及各部分的作用

在电子电路及设备中&#xff0c;一般都需要稳定的直流电源供电。本章所介绍的直流电源为单相小功率电源&#xff0c;它将频率为 50 Hz 50\,\textrm {Hz} 50Hz、有效值为 220 V 220\,\textrm V 220V 的单相交流电压转换为幅值稳定、输出电流为几十安以下的直流电压。 单相交流…

机器学习训练,没有机器怎么办

google的cobal&#xff0c;免费提供15G显存。 https://colab.research.google.com/drive/

十五、MySQL(DCL)如何实现用户权限控制?

1、为什么要实现用户权限控制&#xff1f; 在日常工作中&#xff0c;会存在多个用户&#xff0c;为了避免某些用户对重要数据库进行“误操作”&#xff0c;从而导致严重后果&#xff0c;所以对用户进行权限控制是必须的。 2、常见的权限类型&#xff1a; ALL,ALL PRIVILEGES …

数字孪生产品:数字化时代的变革引擎

数字孪生技术&#xff0c;作为一项前沿的科技创新&#xff0c;正在不断改变我们的世界。它为各行各业的发展提供了无限的可能性&#xff0c;成为了当今数字化时代的一大亮点。数字孪生产品&#xff0c;作为数字孪生技术的具体应用&#xff0c;将在未来发挥越来越重要的作用。 数…

Linux命令之文件管理

Linux命令之文件管理 创建文件删除文件移动文件拷贝文件查看文件文件统计信息的查看文件内容的查看文件的权限文件权限的介绍和表示文件权限的改变 文件的类型 查找文件 创建文件 创建文件的话&#xff0c;一般使用touch命令 touch file1(文件名字)删除文件 删除文件的话&…

QT QToolBox控件使用详解

本文详细的介绍了QToolBox控件的各种操作&#xff0c;例如&#xff1a;新建界面、添加页签、索引设置当前项、获取当前项的索引、获取当前项窗口、获取索引值是int的窗口、移除索引值项、获取项的数量、获取指定索引值、设置索引项是否激活、获取索引值项是否激活、设置项的图标…

可靠的可视化监控平台应用在那些场景?

可视化监控平台是一种用户友好的工具&#xff0c;可以帮助用户实时监控IT设备的运行状态和网络流量&#xff0c;以及监测安全性和性能指标。它们通常采用图形化界面&#xff0c;使得用户能够直观地了解设备和网络的状态。 以下是一些可视化监控平台常见的应用场景&#xff1a;…

R7 7840H和i7 1360p选哪个 R77840H和i71360p对比

i71360P采用10nm工艺 最高睿频 5GHz 十核心 十六线程 三级缓存 18MB热设计功耗(TDP) 28W 支持最大内存 64GB 内存类型 DDR4 3200MHzDDR5 5200MHz集成显卡 Intel Iris Xe Graphics 选i7 1360p还是r7 7840h这些点很重要看过你就懂了 http://www.adiannao.cn/dy r7 7840h采用4nm…

Chrome扩展开发实战:网页图片抓取,打造专属自己的效率插件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

软件测试框架的面试题讲解

主要对测试框架的面试题讲解。 1.测试一个杯子怎么写测试用例&#xff1f; 界面&#xff1a;杯子外观 安全性&#xff1a;杯子有没有毒或细菌 可靠性&#xff1a;杯子从不同高度落下的损坏程度&#xff1b;杯子放水放置12个小时或者24小时&#xff0c;是否漏水 可移植性&#…

Redis基础特性及应用练习-php

redis持久化&#xff08;persistence&#xff09; redis支持两种方式的持久化&#xff0c;可以单独使用或者结合起来使用。 第一种&#xff1a;RDB方式&#xff08;redis默认的持久化方式&#xff09; rdb方式的持久化是通过快照完成的&#xff0c;当符合一定条件时redis会自…

Ansible playbook简介与初步实战,实现批量机器应用下载与安装

一.Ansible playbook简介 playbook是ansible用于配置&#xff0c;部署&#xff0c;和管理被节点的剧本通过playbook的详细描述&#xff0c;执行其中的一些列tasks&#xff0c;可以让远端的主机达到预期的状态。playbook就像ansible控制器给被控节点列出的一系列to-do-list&…

webpack(四)plugin

定义 和loader的区别 loader:文件加载器&#xff0c;能够加载资源&#xff0c;并对这些文件进行一些处理&#xff0c;诸如编译、压缩等&#xff0c;最终一起打包到指定的文件中。plugin:赋予了webpack各种灵活的功能&#xff0c;例如打包优化、资源管理、环境变量注入等&…