SpringMVC中的综合案例

目录

一.常用注解

 实例:

 二.参数转递

 2.1. 基础类型

2.2. 复杂类型

2.3. @RequestParam

2.4.@PathVariable

2.5.@RequestBody

 2.6.RequestHeader 

2.7. 请求方法

三.返回值

3.1.void

 3.2.String

3.3 String+Model

3.4 ModelAndView

四、页面跳转

 4.1.转发

4.2.重定向

最后SpringMVC综合案例就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !


一.常用注解

  • @RequestMapping:@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
  • @RequestParam:@RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上

  • @ModelAttribute:

  1. 绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

  2. 暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

  3. 暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

  • @SessionAttributes:用于将数据存储到会话(Session)中,在多个请求之间共享数据。

  • @RequestBody:用于将方法的返回值直接作为响应体返回给客户端,常用于返回JSON数据。

  • @RequestHeader:使用 @RequestHeader 注解可以获取指定的请求头信息。

  • @PathVariable:该注解请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定。

  • @CookieValue:@CookieValue注解主要是将请求的Cookie数据,映射到功能处理方法的参数上。

 实例:

@RequestMapping:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/{id}", method = RequestMethod.GET, params = "active=true")public String getActiveUser(@PathVariable("id") int id) {// ...}
}

@RequestParam:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/create", method = RequestMethod.POST)public String createUser(@RequestParam("user") User user) {// ...}
}

@ModelAttribute:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/create", method = RequestMethod.POST)public String createUser(@ModelAttribute("user") @Valid User user, BindingResult result) {// ...}
}

@SessionAttributes:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/edit", method = RequestMethod.GET)public String editUser(@ModelAttribute("user") User user) {// ...}
}

@RequestBody:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/create", method = RequestMethod.POST)public String createUser(@RequestBody @Valid User user, BindingResult result) {// ...}
}

@RequestHeader:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/info", method = RequestMethod.POST)public String updateUserInfo(@RequestHeader("Content-Type") String contentType, @RequestHeader("Authorization") String authorization) {// ...}
}

@PathVariable:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/{id}/info/{name}", method = RequestMethod.GET)public String getUserInfo(@PathVariable("id") int userId, @PathVariable("name") String userName) {// ...}
}

@CookieValue:

@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(value = "/info", method = RequestMethod.GET)public String getUserInfo(@CookieValue("sessionId") String sessionId, @CookieValue("userId") int userId) {// ...}
}

 二.参数转递

配置项目中的 pom.xml 配置文件 ,以下配置(修改)完后的所有配置:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>index</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>index Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version><!--添加jar包依赖--><!--1.spring 5.0.2.RELEASE相关--><spring.version>5.0.2.RELEASE</spring.version><!--2.mybatis相关--><mybatis.version>3.4.5</mybatis.version><!--mysql--><mysql.version>5.1.44</mysql.version><!--pagehelper分页jar依赖--><pagehelper.version>5.1.2</pagehelper.version><!--mybatis与spring集成jar依赖--><mybatis.spring.version>1.3.1</mybatis.spring.version><!--3.dbcp2连接池相关 druid--><commons.dbcp2.version>2.1.1</commons.dbcp2.version><commons.pool2.version>2.4.3</commons.pool2.version><!--4.log日志相关--><log4j2.version>2.9.1</log4j2.version><log4j2.disruptor.version>3.2.0</log4j2.disruptor.version><slf4j.version>1.7.13</slf4j.version><!--5.其他--><junit.version>4.12</junit.version><servlet.version>4.0.0</servlet.version><lombok.version>1.18.2</lombok.version><!-- jstl+standard --><jstl.version>1.2</jstl.version><standard.version>1.1.2</standard.version><!-- spring --><spring.version>5.0.2.RELEASE</spring.version><jackson.version>2.9.3</jackson.version></properties><dependencies><!--1.spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!--2.mybatis相关--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--pagehelper分页插件jar包依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${pagehelper.version}</version></dependency><!--mybatis与spring集成jar包依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><!--3.dbcp2连接池相关--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>${commons.dbcp2.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>${commons.pool2.version}</version></dependency><!-- 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><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></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><!--5.其他--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><!--            <scope>test</scope>--></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><!-- spring mvc相关依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>${standard.version}</version></dependency></dependencies><build><finalName>index</finalName><resources><!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--><resource><directory>src/main/resources</directory><includes><include>jdbc.properties</include><include>*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven.compiler.plugin.version}</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><dependencies><!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><configuration><overwrite>true</overwrite></configuration></plugin><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></build>
</project>

 2.1. 基础类型

@RequestMapping("/hello1")public String toHello1(Integer bid,String bname){log.info(">>>> 基础类型+String传参:{},{}",bid,bname);return "index";}

 新建一个paramController类:

package com.junlinyi.web;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author 君临沂* @site www.junlinyi.com* @company 君氏集团* @create 2023-09-05-14:44*/
@Slf4j
@Controller
@RequestMapping("/param")
public class ParamController {@RequestMapping("/hello1")public String index(String bname,Integer bid){
//        System.out.println("刘三金去拿奶茶喽。。。");log.info("简单类型参数:bname:{},bid:{}",bname,bid);return "index";}
}

  index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>看你不爽哦</h1>
</body>
</html>

效果显示:

 

2.2. 复杂类型

@RequestMapping("/hello2")public String toHello2(Book book,HttpServletRequest req,HttpServletResponse resp,HttpSession session){System.out.println(book);log.info(">>>> HttpServletRequest/HttpServletResponse/HttpSession等等传参:{}", req.getRequestURI());return "index";} 

在paramController类中添加以下方法:

@RequestMapping("/hello2")public String hello2(Book book, HttpServletRequest request){
//        System.out.println("靓仔来了喽。。。");//servlet参数获取方式log.info("复杂类型参数:bname:{},bid:{}",request.getParameter("bname"),request.getParameter("bid"));//复杂传参log.info("复杂类型参数:book:{}",book.toString());
//      fail..error warning info debugreturn "index";}

效果演示:

2.3. @RequestParam

@RequestMapping("/hello3")public String toHello3(@RequestParam Integer bid,@RequestParam(required = false,value = "price") Integer bookPrice,@RequestParam("bookName") String bname){log.info(">>>> 使用@RequestParam注解传递参数:{},{},{}", bid,bname,bookPrice);return "index";}

在paramController类中添加以下方法:

@RequestMapping("/hello3")public String hello3(@RequestParam String bname,@RequestParam(required = false) Integer bid){
//        System.out.println("靓仔来了喽。。。");log.info("@requestParam参数:bname:{},bid:{}",bname,bid);
//      fail..error warning info debugreturn "index";}

 注意:

演示效果:

根据条件输入 正确地址:

 

 

2.4.@PathVariable

@RequestMapping("/hello4/{bid}")public String toHello4(@PathVariable("bid") Integer bid){log.info(">>>> 使用@PathVariable注解传递参数:{}", bid);return "index";}

在paramController类中添加以下方法:

@RequestMapping("/hello4/{bid}")public String hello4(@PathVariable("bid") Integer bid){
//        System.out.println("靓仔来了喽。。。");log.info("@requestParam参数:bid:{}",bid);
//      fail..error warning info debugreturn "index";}

 演示效果:

 

2.5.@RequestBody

在进行@RequestBody传参前先要在pom.xml传入依赖,如下:

<jackson.version>2.9.3</jackson.version><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency>

这里我们需要在Eolink Apikit软件工具上进行测试请求地址:

按照以下步骤把参数填写好,query参数是往域名链接添加属性,如下:

然后介绍完Query参数后就开始添加我们的请求体参数,如下:

 2.6.RequestHeader 

@RequestMapping("/hello7")public String toHello7(Book book, @RequestBody Map map, @RequestHeader("jwt") String jwt){System.out.println(map);System.out.println(book);System.out.println(jwt);return "index";}

方法代码如下:

 @RequestMapping("/hello7")public String hello7(@RequestHeader("jwt") String jwt){
//        System.out.println("靓仔来了喽。。。");log.info("@RequestHeader参数:jwt:{}",jwt);
//      fail..error warning info debugreturn "index";}@RequestMapping("/hello8")public String hello8(Book book,@RequestBody Map map,@RequestHeader("jwt") String jwt){
//        System.out.println(""靓仔来了喽。。。");log.info("Book:Book:{}",book.toString());log.info("@RequestBody参数:Map:{}",map);log.info("@RequestHeader参数:jwt:{}",jwt);
//      fail..error warning info debugreturn "index";}

代码完成之后我们需要在Eolink中进行头部请求参数配置,如下: 

然后进行测试结果如下:

最后我们再来测试以下方法八,个人配置如下:

 

2.7. 请求方法

请求方法有:

RequestMapping与GetMapping、PostMapping、PutMapping、DeleteMapping

他们之间的关系为:

RequestMapping=GetMapping+PostMapping+PutMapping+DeleteMapping

RequestMapping与GetMapping、PostMapping、PutMapping、DeleteMapping的区别

RequestMapping不安全,且不具备标识意义。

测试方法如下:

//查询的请求@GetMappingpublic String type1(){System.out.println("@GetMapping:对应查询请求");return "index";}//新增的请求@PostMappingpublic String type2(){System.out.println("@PostMapping:对应新增请求");return "index";}//修改的请求@PutMappingpublic String type3(){System.out.println("@PutMapping:对应修改请求");return "index";}//删除的请求@DeleteMappingpublic String type4(){System.out.println("@DeleteMapping:对应删除请求");return "index";}//RequestMapping=GetMapping+PostMapping+PutMapping+DeleteMapping//RequestMapping不安全,且不具备标识意义

依次进行请求,请求的方式不同会进行不同的请求注解,具体操作与效果如下:

三.返回值

创建一个ResponseUtil工具类,辅助完成测试代码,如下

package com.junlinyi.utils;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));}
}

创建一个ReturnController类,来进行方法的请求测试(包含关于返回值的所以方法)。如下: 

package com.junlinyi.web;import com.junlinyi.utils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;/*** @author 君临沂* @site www.junlinyi.com* @company 君氏集团* @create 2023-09-05-14:44*/
@Controller
@RequestMapping("/rs")
public class ReturnController {@RequestMapping("/test01")public void Test01(HttpServletResponse response) throws Exception {Map<String,Object> map = new HashMap<String,Object>();map.put("id",1);map.put("晚安","亲爱的梦");map.put("梦","增加成功!!!");ResponseUtil.writeJson(response,map);}@ResponseBody@RequestMapping("/test02")public Map Test02(HttpServletResponse response) throws Exception {Map<String,Object> map = new HashMap<String,Object>();map.put("id",1);map.put("晚安","亲爱的梦");map.put("梦","增加成功!!!");return map;}@RequestMapping("/test03")public String Test03() {return "index02";}@RequestMapping("/test04")public String Test04(Model model,HttpServletRequest request) {model.addAttribute("Nobo1","他字字句句喜欢你");request.setAttribute("Nobo1","我曾经也想过一了百了");return "index02";}@RequestMapping("/test05")public ModelAndView Test05() {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("Nobo2","他字字句句喜欢你");modelAndView.addObject("Nobo2","我曾经也想过一了百了");modelAndView.setViewName("index02");return modelAndView;}}

创建一个index.jsp页面进行显示测试,如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>字字句句喜欢你</h1>
歌词上句:  ${Nobo1}<br>
歌词下句:  ${Nobo2}
</body>
</html>

3.1.void

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

 3.2.String

3.3 String+Model

打开浏览器输入相对应地址,结果如下:

Model测试:

将test03换成test04接着输出即可:

3.4 ModelAndView

打开浏览器输入相应请求地址,结果如下:

四、页面跳转

创建一个PathConterller测试类,进行页面跳转的各种方法测试,代码如下: 

package com.junlinyi.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;/*** @author 君临沂* @site www.junlinyi.com* @company 君氏集团* @create 2023-09-06-16:19*/@Controller
@RequestMapping("/ts")
public class PathConterller {@ResponseBody@RequestMapping("/test02")public Map Test02(HttpServletResponse response) throws Exception {Map<String,Object> map = new HashMap<String,Object>();map.put("id",1);map.put("晚安","亲爱的梦");map.put("梦","增加成功!!!");return map;}//返回值中有转发(forward)和重定向(redirect)这两种跳转方式将会绕开视图解析器的前缀和后缀//转发到(当前类)的某一个方法@RequestMapping("/Demo01")public String Demo01(){System.out.println("请求地址:Demo01");System.out.println("转发到(当前类)的某一个方法");return "forward:test02";}//转发到(其他类)的某一个方法@RequestMapping("/Demo02")public String Demo02(){System.out.println("请求地址:Demo02");System.out.println("转发到(其他类)的某一个方法");return "forward:/rs/test04";}//重定向到(其他类)的某一个方法@RequestMapping("/Demo03")public String Demo03(){System.out.println("请求地址:Demo03");System.out.println("重定向到(其他类)的某一个方法");return "redirect:test02";}//重定向到(其他类)的某一个方法@RequestMapping("/Demo04")public String Demo04(){System.out.println("请求地址:Demo04");System.out.println("重定向到(其他类)的某一个方法");return "redirect:/rs/test04";}}

 4.1.转发

它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用转发,既可以转发到jsp, 也可以转发到其他的控制器方法。

 打开服务器 ,在浏览器上方输入对应请求地址此处输入Demo02,结果如下:

4.2.重定向

打开服务器 ,在浏览器上方输入对应请求地址此处输入Demo04,结果如下:

最后SpringMVC综合案例就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫 教程:IP池的使用

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施&#xff0c;例如很多网站会检测某一段时间某个IP的访问次数&#xff0c;如果访问频率…

Redis(详细)

目录 Redis是什么 Redis的主要特点 Redis的使用场景 会话存储 缓存存储 实现分布式锁 Redis为什么这么快 基于内存操作 高效的数据结构 多路I/O复用模型 单线程执行 Redis常见的数据结构 Redis有序列表的实现 跳跃表的执行流程 Redis分布式锁实现 使用分布式锁…

【iOS】MVC

文章目录 前言一、MVC各层职责1.1、controller层1.2、model层1.3、view层 二、总结三、优缺点3.1、优点3.2、缺点 四、代码示例 前言 MVC模式的目的是实现一种动态的程序设计&#xff0c;使后续对程序的修改和扩展简化&#xff0c;并且使程序某一部分的重复利用成为可能。除此…

win10自带wifi共享功能

1、按下【wini】组合键打开windows设置&#xff0c;点击【网络和internet】&#xff1b; 2、按照下图&#xff0c;打开个移动热点&#xff0c;设置名称、密码。

【C++】详解std::thread

2023年9月10日&#xff0c;周日下午开始 2023年9月10日&#xff0c;周日晚上23:35完成 虽然这篇博客我今天花了很多时间去写&#xff0c;但是我对std::thread有了一个完整的认识 不过有些内容还没完善&#xff0c;以后有空再更新.... 目录 头文件类的成员类型方法(construc…

LVS DR模式负载均衡群集部署

目录 1 LVS-DR 模式的特点 1.1 数据包流向分析 1.2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2.1 配置负载调度器 2.1.1 配置虚拟 IP 地址 2.1.2 调整 proc 响应参数 2.1.3 配置负载分配策略 2.2 部署共享存储 2.3 配置节点服务器 2.3.1 配置虚拟 IP 地址 2.3.2…

iOS IdiotAVplayer实现视频分片缓存

文章目录 IdiotAVplayer 实现视频切片缓存一 iOS视频边下边播原理一 分片下载的实现1 分片下载的思路2 IdiotAVplayer 实现架构 三 IdiotAVplayer 代码解析IdiotPlayerIdiotResourceLoaderIdiotDownLoader IdiotAVplayer 实现视频切片缓存 一 iOS视频边下边播原理 初始化AVUR…

自动化运维——ansible (五十二) (01)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、概述 1.1 为什么要用自动化运维软件 1.2 自动化运维 1.3 自动化运维要注意的方面 1.4 自动化运维主要关注的方面 1.5 常见的开源自动化运维软件 1.6 自动化运维软件…

K8S:kubectl陈述式及声明式资源管理

文章目录 一.陈述式资源管理方法1.陈述式资源管理概念2.基本信息查看&#xff08;1&#xff09;查看版本信息&#xff08;2&#xff09;查看资源对象简写&#xff08;3&#xff09;查看集群信息&#xff08;4&#xff09;配置kubectl自动补全&#xff08;5&#xff09;node节点…

外传-Midjourney的局部重绘功能

今天在抄袭。。。啊不&#xff0c;借鉴 midjourney 官网教程的时候&#xff0c;发现多了一个 局部重绘的功能&#xff0c;意外发觉还不错&#xff0c;分享一下用法。 先给大家说一下&#xff0c;我这段时间都在学习 SD&#xff0c;局部重绘是基操&#xff0c;而 MJ 一直是次次…

为什么要使用设计模式,以及使用设计模式的好处

在软件开发中&#xff0c;衡量软件质量只要包含如下指标&#xff1a; 正确性可维护性可读性可扩展性简洁性可测试性健壮性灵活性可复用性 然而&#xff0c;对于一些刚入行的新程序员来说&#xff0c;往往会注意不到上面这些问题&#xff0c;从而产生了一些让人头皮发麻的烂代…

【动态规划刷题 13】最长递增子序列 摆动序列

300. 最长递增子序列 链接: 300. 最长递增子序列 1.状态表示* dp[i] 表⽰&#xff1a;以 i 位置元素为结尾的「所有⼦序列」中&#xff0c;最⻓递增⼦序列的⻓度。 2.状态转移方程 对于 dp[i] &#xff0c;我们可以根据「⼦序列的构成⽅式」&#xff0c;进⾏分类讨论&#…

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路&#xff1a;通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份&#xff1a;当活动路径发生故障时&#xff0c;激活备份链路&#xff0c;及时恢复网络连通性。 二、STP选举机制 1、目的&#xff1a;找到阻塞的端口 2、STP交换机的角色&am…

MAC M1芯片安装mounty读写移动硬盘中的文件

因为移动硬盘中的文件是微软公司NTFS格式&#xff0c;MAC只支持自己的APFS或者HFS&#xff0c;与微软的NTFS不兼容&#xff0c;所以需要第三方的软件来支持读写硬盘中的文件&#xff0c;经过一上午的折腾&#xff0c;最终选择安装mounty这个免费的第三方软件 工具网址连接&am…

YOLO目标检测——棉花病虫害数据集+已标注txt格式标签下载分享

实际项目应用&#xff1a;目标检测棉花病虫害数据集的应用场景涵盖了棉花病虫害的识别与监测、研究与防治策略制定、农业智能决策支持以及农业教育和培训等领域。这些应用场景可以帮助农业从业者更好地管理棉花病虫害&#xff0c;提高棉花产量和质量&#xff0c;推动农业的可持…

线性代数的本质(二)

文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy &#xff0c;基向量为 i , j \mathbf i,…

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接…

用滑动条做调色板---cv2.getTrackbarPos(),cv2.creatTrackbar()

滑动轨迹栏作调色板 cv.createTrackbar(‘R’, ‘image’, 0, 255, nothing) 参数&#xff1a;哪个滑动轨迹栏&#xff0c;哪个窗口&#xff0c;最小值&#xff0c;最大值&#xff0c;回调函数 cv.getTrackbarPos(‘R’, ‘image’) 参数&#xff1a;轨迹栏名&#xff0c;窗口…

Nodejs 第十五章(child_process)

child_process 子进程 子进程是Nodejs核心API&#xff0c;如果你会shell命令&#xff0c;他会有非常大的帮助&#xff0c;或者你喜欢编写前端工程化工具之类的&#xff0c;他也有很大的用处&#xff0c;以及处理CPU密集型应用。 创建子进程 Nodejs创建子进程共有7个API Sync…

controller接口上带@PreAuthorize的注解如何访问 (postman请求示例)

1. 访问接口 /*** 查询时段列表*/RateLimiter(time 10,count 10)ApiOperation("查询时段列表")PreAuthorize("ss.hasPermi(ls/sy:time:list)")GetMapping("/list")public TableDataInfo list(LsTime lsTime){startPage();List<LsTime> l…