Spring Boot的Web开发
目录
Spring Boot的Web开发
1.静态资源映射规则
第一种静态资源映射规则
2.enjoy模板引擎
3.springMVC
3.1请求处理
@RequestMapping
@DeleteMapping 删除
@PutMapping 修改
@GetMapping 查询
@PostMapping 新增
3.2参数绑定
一.支持数据类型:
3.3常用注解
一.@RequestParam
二.@RequestBody
三.@PathVaribale
四.@RequestHeader
五.@CookieValue
3.4数据传递
3.5文件上传
4.注册Servlet三大组件 Servlet/Filter/Listener
5.切换为其他嵌入式Servlet容器
6.restFul
Spring Boot的Web开发
1.静态资源映射规则
第一种静态资源映射规则
总结:
只要静态资源放在类路径下: called /static (or INF/resources
访问 : 当前项目根路径/ + 静态资源名
静态资源访问前缀 spring: mvc: static-path-pattern: /apesource/**
2.enjoy模板引擎
1.将页面保存在templates目录下
2.添加坐标
<dependency><groupId>com.jfinal</groupId><artifactId>enjoy</artifactId><version>5.0.3</version></dependency>
3.开启配置(创建配置类)
@Configuration
public class SpringBootConfig {@Bean(name = "jfinalViewResolver")public JFinalViewResolver getJFinalViewResolver() {
// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr = new JFinalViewResolver();
// 对 spring boot 进行配置jfr.setSuffix(".html");jfr.setContentType("text/html;charset=UTF-8");jfr.setOrder(0);
// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);
// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样Engine engine = JFinalViewResolver.engine;
// 热加载配置能对后续配置产生影响,需要放在最前面engine.setDevMode(true);
// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();
// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix("/view/")engine.setBaseTemplatePath("/templates/");
// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);
return jfr;}
}
4.编写代码
@Controller
@RequestMapping("user")
public class RequestController {@RequestMapping("/wwt")public String successFound(){return "success";}
}
3.springMVC
3.1请求处理
@RequestMapping
意义:处理用户的请求,相似于doget与dopost
位置: 类上:一级目录 方法:二级目录 例如:user/save user/delete student/save student/delete 属性: value = "",path = "" 表示请求路径
method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
params = "" 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
注意:1.超链接默认发送的是get请求 2.所有请求所携带的参数格式均为:key = value
@DeleteMapping 删除
@PutMapping 修改
@GetMapping 查询
@PostMapping 新增
作用与@RequestMapping一样,只是请求方式不同,语法相同。
@RequestMapping可以点击查看源码 @Target({ElementType.METHOD, ElementType.TYPE}) METHOD==代表修饰方法,TYPE==代表修饰类
3.2参数绑定
绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
一.支持数据类型:
1.基本类型参数:
包括基本类型和 String 类型
1.发送请求中携带数据的key与方法参数的name必须一致 2.数据类型合法
@RequestMapping("/show1")public String one(String msg1){System.out.println("msg1="+msg1);return "success";}
2.POJO类型参数: 包括实体类,以及关联的实体类
@RequestMapping("/show3")public String sendEmp(Emp emp){ //发送请求中携带数据的key与实体类的属性名必须一致System.out.println(emp);return "success";}
嵌套实体类:
@RequestMapping("/show3")public String sendEmp(Emp emp){ //发送请求中携带数据的key与实体类的属性名必须一致System.out.println(emp);return "success";}
<!--被嵌套的实体类对象的name使用: 对象名.属性名 的方式 该属性名与发送请求中携带数据key必须一致--><form action="/one/show4" method="post">员工编号:<input type="text" name="eid"><br/>员工姓名:<input type="text" name="ename"><br/>员工性别:<input type="text" name="esex"><br/>部门编号:<input type="text" name="dept.did"><br/>部门名称:<input type="text" name="dept.dname"><br/><input type="submit" value="发送请求"></form>
3.数组和集合类型参数: 包括 List 结构和 Map 结构的集合(包括数组)
@RequestMapping("/show5")public String sendMap(@RequestParam Map map){//参数类型Map前需要添加@RequestParam注解System.out.println(map);return "success";}
<form action="/one/show6" method="post">部门编号:<input type="text" name="did"><br/>部门名称:<input type="text" name="dname"><br/>员工编号1:<input type="text" name="emps[0].eid"><br/>员工姓名1:<input type="text" name="emps[0].ename"><br/>员工性别1:<input type="text" name="emps[0].esex"><br/>员工编号3:<input type="text" name="empMap['one'].eid"><br/>员工姓名3:<input type="text" name="empMap['one'].ename"><br/>员工性别3:<input type="text" name="empMap['one'].esex"><br/><input type="submit" value="提交"><a href="/one/show7?nums=1233&nums=234&nums=23432">发送请求7</a><h3>使用 ServletAPI 对象作为方法参数</h3><a href="/one/show7">发送请求8</a></form>
4.使用 ServletAPI 对象作为方法参数 HttpServletRequest HttpServletResponse HttpSession java.security.Principal Locale InputStream OutputStream Reader Writer
@RequestMapping("/show8")public String show7(HttpServletRequest request, HttpServletResponse response){
// request.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding("UTF-8");System.out.println(request);System.out.println(response);request.getParameter("msg1");
HttpSession session = request.getSession();System.out.println(session);session.setAttribute("","");try {response.sendRedirect("重定向");} catch (IOException e) {e.printStackTrace();}ServletContext applaction = session.getServletContext();
return "success";}
二.使用要求 1.发送请求中携带数据的key与方法参数的name必须一致 2.数据类型合法
3.3常用注解
springMVC常用注解
一.@RequestParam
作用: 把请求中指定名称的参数给控制器中的形参赋值。 如果页面标签名称和方法参数名称不一致,可以使用此注解实现 属性: name属性:设置参数名称 defaultValue属性:设置默认值 required属性:设置是否为必传
@RequestMapping("show1")public String show1(@RequestParam(value = "msg") String msg1){System.out.println("msg1="+msg1);return "success";}
@RequestMapping("/show2")public String show2(@RequestParam("msg") String msg1,@RequestParam("msg2") String msg2){System.out.println("msg1="+msg1+"msg2="+msg2);return "success";}
二.@RequestBody
作用: 用于获取"请求体"内容。直接使用得到是 key=value&key=value... 结构的数据,并可以转换为对象 属性: required:是否必须有请求体。默认值是:true。
@RequestMapping("/show3")public String show3(@RequestBody Emp emp){System.out.println(emp);return "success";}
三.@PathVaribale
作用: 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id}, 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之 后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志 属性: value:用于指定 url 中占位符名称。 required:是否必须提供占位符。
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次, 更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下: GET:用于获取资源 POST:用于新建资源 PUT:用于更新资源 DELETE:用于删除资源 例如: /users/1 GET : 得到 id = 1 的 user /users/1 DELETE: 删除 id = 1 的 user /users/1/新名/新性 PUT: 更新 id = 1 的 user /users/新名/新性 POST: 新增 user
@RequestMapping("/show4/{ename}/{eid}")public String show4(@PathVariable String ename,@PathVariable String eid){System.out.println(ename+"ename"+eid+"eid");return "success";}
@RequestMapping("/show5/{name}/{id}")public String show5(@PathVariable(value = "name") String ename,@PathVariable(value = "id") int eid){System.out.println(ename+"ename"+eid+"eid");return "success";}
四.@RequestHeader
作用: 用于获取请求消息头。
属性: value:提供消息头名称 required:是否必须有此消息头
@RequestMapping("/show1")public String show1(@RequestHeader(value = "name")String name){System.out.println(name);return "success";}
五.@CookieValue
作用: 用于把指定 cookie 名称的值传入控制器方法参数。
属性: value:指定 cookie 的名称。 required:是否必须有此 cookie。
@RequestMapping("/show2")public String show2(@CookieValue(value = "JSESSIONID",required = false)String id){System.out.println(id);return "success";}
3.4数据传递
controller的返回值类型有两种,Json和String
String类型返回值作用:
-
充当视图的逻辑名称,默认页面跳转为请求转发方式
@RequestMapping("/show01")public String show01(){System.out.println("成功响应show01");return "success";}
2. 充当一次请求转发或重定向(发送请求)
@RequestMapping("/show02")public String show02(){System.out.println("成功响应show02");return "redirect:show01";}@RequestMapping("/show03")public String show03(){System.out.println("成功响应show03");return "forward:show01";}
3. 给session中存数据并返回前端
@RequestMapping("/show04")public String show04(HttpServletRequest request){System.out.println("成功响应show04");Emp emp = new Emp(11,"wwt","男");request.getSession().setAttribute("emp",emp);return "success";}
Json类型返回值作用:
将对象转换为json格式返回给前端:
@RequestMapping("/show02")@ResponseBodypublic List<Emp> shoe02(){Emp emp1 = new Emp(12,"wwt","男");Emp emp2 = new Emp(13,"wwt","男");Emp emp3 = new Emp(14,"wwt","男");List<Emp> list = new ArrayList<>();list.add(emp1);list.add(emp2);list.add(emp3);return list;}
3.5文件上传
该案例以七牛云为例:
-
在springboot项目中导入七牛云需要坐标
<!--导入七牛云需要坐标--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.25</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.2</version><scope>compile</scope></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version><scope>compile</scope></dependency><dependency><groupId>com.qiniu</groupId><artifactId>happy-dns-java</artifactId><version>0.1.6</version><scope>test</scope></dependency>
2.配置七牛云相关信息:
@Configuration
public class SpringBootConfig {@Bean(name = "jfinalViewResolver")public JFinalViewResolver getJFinalViewResolver() {// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr = new JFinalViewResolver();// 对 spring boot 进行配置jfr.setSuffix(".html");jfr.setContentType("text/html;charset=UTF-8");jfr.setOrder(0);// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样Engine engine = JFinalViewResolver.engine;// 热加载配置能对后续配置产生影响,需要放在最前面engine.setDevMode(true);// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix("/view/")engine.setBaseTemplatePath("/templates/");// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);return jfr;}
}
3.写一个简单的文件上传页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body><form action="/file/show1" method="post" enctype="multipart/form-data">用户名:<input name="uname"/><br>图片:<input name="upic" type="file"/><br><input type="submit" value="上传"></form>
</body>
</html>
4.编写控制文件上传controller
@Controller
@RequestMapping("/file")
public class fileController {@RequestMapping("/show")public String show(){return "index";}@RequestMapping("/show1")public String file(String uname, MultipartFile upic, HttpServletRequest request){System.out.println(uname);System.out.println(upic);System.out.println(upic.getOriginalFilename());System.out.println(upic.getName());//方式1.将文件upic以流的方式写入当前服务器磁盘(应用服务器)//方式2.文件服务器(七牛云)//构造一个带指定 Region 对象的配置类Configuration cfg = new Configuration(Region.autoRegion());//...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);//...生成上传凭证,然后准备上传String accessKey = "FvHzx7X-XV_EJwLWin-8-AkozGAu8tR0_ELaSCcB";String secretKey = "DQSLg30LmmrlWuFGiRUKMxrw6l2169A0i-miKJZ7";String bucket = "db202407";//默认不指定key的情况下,以文件内容的hash值作为文件名String key = null;String name = null;try {byte[] uploadBytes = upic.getBytes();Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(uploadBytes, key, upToken);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);//获取文件名System.out.println(putRet.hash);//获取文件hash值name = putRet.key;} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}} catch (Exception ex) {//ignore}request.getSession().setAttribute("picname",name);return "success";}
}
5.最后将它显示在页面上(通过enjoy模版引擎传递数据)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body>成功上传<div>#(session.picname)</div><img src="http://sgwh6dzed.hd-bkt.clouddn.com/#(session.picname)">
</body>
</html>
4.注册Servlet三大组件 Servlet/Filter/Listener
而由于 Spring Boot 默认是以 jar 包的方式运行嵌入式Servlet容器来启动应用,没有web.xml文件, Spring提供以下Bean来注册三大组件
-
配置类配置三大组件:
@Configuration
public class MyMvcConfig {//注册Serlvet//替换:@WebServlet(urlPatterns = "/mySerlvet")@Beanpublic ServletRegistrationBean doServlet(){ServletRegistrationBean<MyServlet> bean = new ServletRegistrationBean<>();bean.setServlet(new MyServlet());bean.setUrlMappings(Arrays.asList("/myServlet"));bean.setLoadOnStartup(1);return bean;}//注册Filter@Beanpublic FilterRegistrationBean doFilter(){FilterRegistrationBean filter = new FilterRegistrationBean();filter.setFilter(new MyFilter());filter.addUrlPatterns("/*");return filter;}//注册Listener@Beanpublic ServletListenerRegistrationBean doListener(){//关闭监听器切记不要点击红色按钮,太暴力,点击控制台左侧existServletListenerRegistrationBean listener = new ServletListenerRegistrationBean();listener.setListener(new MyListener());return listener;}
}
(1) ServletRegistrationBean 注册自定义Servlet
//@WebServlet("/servlet")
public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("进入servlet");resp.getWriter().println("<h1>Hello World!</h1>");super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
(2) FilterRegistrationBean 注册自定义Filter
//@WebFilter(urlPatterns = {"/*"})
public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("========请求过滤");servletRequest.setCharacterEncoding("UTF-8");//分水岭filterChain.doFilter(servletRequest,servletResponse);servletRequest.setCharacterEncoding("UTF-8");System.out.println("========响应过滤");}
}
(3) ServletListenerRegistrationBean 注册自定义Listener
//@WebListener
public class MyListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("执行listener初始化方法");ServletContextListener.super.contextInitialized(sce);}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("执行listener销毁方法");ServletContextListener.super.contextDestroyed(sce);}
}
2. 如果使用传统 @WebFilter...实现注册也可以
条件:1.一定是自定义组件
2.启动类添加@ServletComponentScan
5.切换为其他嵌入式Servlet容器
SpringBoot 默认针对Servlet容器提供以下支持:
-
Tomcat(默认使用)
-
Jetty :支持长连接项目(如:聊天页面)
-
Undertow : 不支持 JSP , 但是并发性能高,是高性能非阻塞的容器
切换 Jetty 容器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除tomcat容器 --><exclusions><exclusion><artifactId>spring-boot-starter-tomcat</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency><!--引入其他的Servlet容器--><dependency><artifactId>spring-boot-starter-jetty</artifactId><groupId>org.springframework.boot</groupId></dependency>
嵌入式Servlet容器:运行启动类就可启动,或将项目打成可执行的 jar 包 优点:简单、快捷; 缺点:默认不支持JSP、优化定制比较复杂使用定制器, 还需要知道 每个功能 的底层原理 外置Servlet容器:配置 Tomcat, 将项目部署到Tomcat中运行
6.restFul
REST 指的是一组架构约束条件和原则,rest原则有部分组成: URL定位资源,HTTP动词操作(GET, POST, PUT,DELETE) 描述操作。
设计RESTful风格的API:
- 在RESTful风格的架构中, 每个网址代表一种资源,所以网址中不能有动词,只能有名词。而且所 用的名词往往与数据库的表名对应。
- HTTP动词设计: GET (获取资源) POST (新建资源) PUT (更新资源,客户端提供改变后的完整资源) DELETE (删除资源)
请求方式 含义
GET /zoos 列出所有动物园
POST /zoos 新建一个动物园
GET /zoos/ID 获取某个指定动物园的信息
PUT /zoos/ID 更新某个指定动物园的信息(提供该动物园的全部信息)
DELETE /zoos/ID 删除某个动物园
GET /zoos/lD/animals 列出某个指定动物园的所有动物
DELETE /zoos/lD/animals/ID 删除某个指定动物园的指定动物
相关文章:

Spring Boot的Web开发
目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…...

Spark 解析嵌套的 JSON 文件
1、什么是嵌套的JSON文件? 嵌套的JSON文件是指文件中包含了嵌套的JSON对象或数组。例如,以下是一个嵌套的JSON文件的示例: {"name": "John","age": 30,"address": {"street": "123…...

VMware虚拟机中CentOS7自定义ip地址并且固定ip
配置固定ip(虚拟机) 前提:虚拟机网络配置成,自定义网络并选择VMnet8(NAT 模式) 操作(如下图):点击虚拟机–》设置–》–》硬件–》网络适配器–》自定义:特定虚拟网络–》选择:VMnet8(NAT 模式) 虚拟机网络设置 需要记…...

CCS(Code Composer Studio 10.4.0)编译软件中文乱码怎么解决
如果是所有文件都出现了中文乱码这时建议直接在窗口首选项中修改:选择"Window" -> "Preferences",找到"General" -> "Workspace",将"Text file encoding"选项设置为"Other&quo…...

Flutter 3 完全支持网页端
Flutter 3 可以用于开发网页端应用。自 Flutter 2.0 起,Flutter 就已经支持 Web 平台,并且在 Flutter 3 中得到了进一步的改进和优化。以下是使用 Flutter 3 开发网页端的一些优势和特点: Flutter 3 开发网页端的优势: 跨平台一致…...

vue.js入门
目录 一. 框架概述 二. vue常用命令 2.1 插值表达式 2.2 v-text 2.3 v-html 2.4 v-on 2.5 v-model 2.6 v-show 2.7 v-if 2.8 v-else 2.9 v-bind 2.10 v-for 三. vue生命周期函数 目录 一. 框架概述 二. vue常用命令 2.1 插值表达式 2.2 v-text 2.3 v-html 2…...

API签名认证
前言(项目背景): 这个API签名认证是API开放平台得一个重要环节,我们知道,这个API开发平台,用处就是给客户去调用现成得接口来完成某些事情得。 在讲API签名认证之前,我们先模拟一个场景并且介绍…...

C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器
在这篇文章中,我们将探讨如何在 ASP.NET WebForms 中实现IP拦截器,以便在 ASMX Web 服务方法 和 HTTP 请求 中根据IP地址进行访问控制。我们将使用自定义的 SoapExtension 和 IHttpModule 来实现这一功能,并根据常用的两种文本传输协议&#…...

前端(1)HTML
1、标签 创建1.html文件,浏览器输入E:/frontheima/1.html,可以访问页面 页面展示 在VSCODE安装IDEA的快捷键,比如ctld复制一行、ctrlx剪切 <p id"p1" title"标题1">Hello,world!</p> <p id"p2"…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十三章 设备树下的platform驱动
i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

Java正则表达式判断有无特殊字符
//^代表否定,匹配除了数字、字母、下划线的特殊字符。 private static final String SPECIAL_CHAR_PATTERN "[^a-zA-Z0-9_]"; Pattern pattern Pattern.compile(SPECIAL_CHAR_PATTERN); Matcher matcher pattern.matcher(userAccount); // 如果 find(…...

使用Java和Spring AMQP构建消息驱动应用
使用Java和Spring AMQP构建消息驱动应用 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 消息驱动应用程序在现代系统架构中扮演着重要角色,特别是在处理高并发和异步任务时。Spring AMQ…...

【NLP】提升文本生成多样性的实用方法
比如用T5模型,训练数据是inputText-outputText格式,预测时do_sample=False # 预测代码from transformers import TFAutoModelForSeq2SeqLM from transformers import AutoTokenizercheckpoint_local = "./path/" tokenizer = AutoTokenizer.from_pretrained(check…...

鸿蒙(HarmonyOS)下拉选择控件
一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0(API 9) 二、效果图 三、代码 SelectPVComponent.ets Component export default struct SelectPVComponent {Link selection: SelectOption[]priva…...

Java类加载器实现机制详细笔记
1. 类加载器的基本概念 类加载器(ClassLoader):在Java中,类加载器负责将Java类动态加载到JVM中。它是实现动态类加载机制的核心组件,对于开发复杂应用程序(如插件系统、模块化设计等)至关重要。…...

Git之repo sync -l与repo forall -c git checkout用法区别(四十九)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

【公式解释】《系统论》《控制论》《信息论》的共同重构:探索核心公式与深度解析
《系统论》《控制论》《信息论》的共同重构:探索核心公式与深度解析 关键词:系统论、控制论、信息论、状态空间方程、系统矩阵。 Keywords: System theory, Control theory, Information theory, State-space equations, System matrices. 核心公式与三论共同之处 在系统…...

电脑格式化好还是恢复出厂设置好?
电脑格式化好还是恢复出厂设置好?使用电脑的过程中,系统问题、病毒感染、性能下降等原因可能会导致我们考虑对电脑进行大规模的清理和恢复操作。本文将详细探讨电脑格式化和恢复出厂设置的区别、优缺点,以及不同场景选择哪种方法合适。 选择电…...

使用 Windows 应用程序 SDK 构建下一代应用程序
微软面临的最大问题之一是如何让 Windows 再次成为吸引开发者的平台。无论用户使用什么设备和操作系统,都可以很容易地将 Web 前端放在支持桌面和移动用户的云原生应用程序上。 我们处在一个奇怪的境地,唯一能利用最新 PC 硬件的应用程序是 Office、Phot…...

可消费的媒体类型和可生成的媒体类型
可消费的媒体类型和可生成的媒体类型 在 Spring MVC 中,“可消费的媒体类型”和“可生成的媒体类型”是两个重要的概念,用于控制控制器方法处理和返回的内容类型。它们分别通过 consumes 和 produces 属性来指定。下面是它们的详细区别: 可…...

C++中指针与迭代器的区别
C中的迭代器和指针都是用于访问和操作内存中的数据结构的机制,但它们在使用方式和功能上有一些关键的区别。 #mermaid-svg-23bevhEih3Ch4ucl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23bevhEih3Ch…...

若依框架 : 生成代码
6.生成代码 6.1.配置生成设置 ruoyi-generator -> src -> main -> resources -> generator.yml 由于 案例中 表都有 前缀 为 tta_ , 这里设置去掉 6.2.生成代码 6.2.1.导入数据库中的表 6.2.2.修改设置 6.2.2.1.设置生成信息 点击 编辑 -> 生成信息 特别…...

RTMP协议解析
RTMP(Real Time Message Protocol)是一种由Adobe公司提出的应用层协议,主要用于实时音视频数据的传输。RTMP协议的主要有以下特点: 1. 多路复用:RTMP允许多个音视频数据流在单个TCP连接上进行传输。 2. 分包传输&…...

禁忌搜索算法(Tabu Search,TS)及其Python和MATLAB实现
禁忌搜索算法是一种现代启发式搜索方案,主要用于解决组合优化问题。该算法由George F. Lugeral于1986年首次提出,旨在增强局部搜索算法的性能,避免其陷入局部最优解。禁忌搜索利用一个称为“禁忌表”的数据结构,记住最近访问的解决…...

Meta发布Llama 3.1 405B模型:开源与闭源模型之争的新篇章
引言 在人工智能领域,开源与闭源模型之争一直是热点话题。近日,Meta发布了最新的Llama 3.1 405B模型,以其强大的性能和庞大的参数规模,成为了开源模型中的佼佼者。本文将详细介绍Llama 3.1 405B模型的性能、功能及其在开源领域的…...

Linux网络协议深度解析:从IP到TCP/IP堆栈
Linux网络协议深度解析是一个复杂而详细的主题,它涵盖了从基本的数据包传输到复杂的协议交互。以下是对"Linux网络协议深度解析:从IP到TCP/IP堆栈"这一主题的简要解析: IP协议(Internet Protocol) •作用:…...

AWS DMS MySQL为源端,如何在更改分区的时候避免报错
问题描述: 文档[1]中描述MySQL compatible Databases作为DMS任务的源端,不支持MySQL 分区表的 DDL 更改。 在源端MySQL进行分区添加时,日志里会出现如下报错: [SOURCE_CAPTURE ]W: Cannot change partition in table members…...

Java从基础到高级特性及应用
Java,作为一门历史悠久且广泛应用的编程语言,自1995年问世以来,便以其跨平台性、面向对象、自动内存管理等特点,在软件开发领域占据了举足轻重的地位。从桌面应用到企业级系统,从移动开发到云计算服务,Java…...

JavaScript(17)——事件监听
什么是事件? 事件是在编程时系统内发生的动作或发生的事情,比如用户在网页上单击一个按钮 什么是事件监听? 就是让程序检测是否有事件产生,一旦有事件触发,就立刻调用一个函数做出响应,也称为绑定事件或…...

Dav_笔记11:SQL Tuning Overview-sql调优 之 4
开发高效的SQL语句 本节介绍了提高SQL语句效率的方法: ■验证优化程序统计信息 ■审查执行计划 ■重构SQL语句 ■重组索引 ■修改或禁用触发器和约束 ■重组数据 ■随着时间的推移维护执行计划 ■尽可能少地访问数据 验证优化程序统计信息 查询优化器在确定最佳执行…...