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类型返回值作用:

  1. 充当视图的逻辑名称,默认页面跳转为请求转发方式

    @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文件上传

该案例以七牛云为例:

  1. 在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来注册三大组件

  1. 配置类配置三大组件:

@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:

  1. 在RESTful风格的架构中, 每个网址代表一种资源,所以网址中不能有动词,只能有名词。而且所 用的名词往往与数据库的表名对应。
  2. 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                       删除某个指定动物园的指定动物

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

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

相关文章

Spark+实例解读

第一部分 Spark入门 学习教程&#xff1a;Spark 教程 | Spark 教程 Spark 集成了许多大数据工具&#xff0c;例如 Spark 可以处理任何 Hadoop 数据源&#xff0c;也能在 Hadoop 集群上执行。大数据业内有个共识认为&#xff0c;Spark 只是Hadoop MapReduce 的扩展&#xff08…

22 Python常用内置函数——枚举

enumerate() 函数用来枚举可迭代对象中的元素&#xff0c;返回可迭代的 enumerate 对象&#xff0c;其中每个元素都是包含索引和值的元组。 print(enumerate(abcd)) print(list(enumerate(abcd))) # 枚举字符串中的元素 print(list(enumerate([hello, world]))) # 枚举列表中…

【数据结构】:大厂面试经典链表OJ题目详解

反转链表 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路解透 本题就是通过不停地将最先的 head 节点位置的后一位插到最前面&#xff0c;完成链表的反转 本题需要两个节点变量 cur&#xff1a;其任务就是定位到原 head 节点位置的前一位&#xff0c;然后将自己…

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

git配置环境变量

一.找到git安装目录 打开此git安装目录下的bin文件&#xff0c;复制此文件路径 二.配置环境变量 2.1 右键点击此电脑的属性栏 2.2 点击高级系统配置 2.3 点击环境变量 2.4 按图中步骤进行配置 三.配置完成 win r 输入cmd打开终端 终端页面中输入 git --version 如图所示…

给定日期计算时间(2025新年倒计时)

目录 1.安装所需安装包 2.查看安装包是否安装成功 ​ 3.使用 Pandas 读取数据文件 4.定义图像背景 5.matplotlib输出 6.当前指定格式时间 7.2025新年倒计时 1.安装所需安装包 pip install 包名 2.查看安装包是否安装成功 python -m pip list ​ 3.使用 Pandas 读取数…

深度解析Linux-C——结构体(初始化,结构体数组,结构体大小,位段操作,联合体,内存对齐,C的预处理,宏和带参宏,条件编译)

目录 结构体的三种初始化 结构体的两种引用 结构体数组 结构体大小 结构体实现位段操作 联合体 内存对齐 C的预处理 带参宏 条件编译 结构体的三种初始化 定义如下结构体 struct student {char name[100]; int age; float height; } ; 1、定义变量时初始化 s…

Redis从入门到超神-(十二)Redis监听Key的过期事件

前言 试想一个业务场景&#xff0c;订单超过30分钟未支付需要做自动关单处理,修改订单状态&#xff0c;库存回退等&#xff0c;你怎么实现&#xff1f;方案一&#xff1a;可以使用定时任务扫表&#xff0c;通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…

推荐一款.NET开源、简洁易用的Windows桌面小说阅读应用

前言 今天大姚给大家分享一款.NET开源、免费、简洁易用的Windows桌面小说阅读应用(是原生的 Windows 应用&#xff0c;为 Windows 11 系统设计)&#xff1a;CleanReader.Desktop。 该应用适合喜欢阅读网文或者是本地轻量阅读的用户。 系统要求 操作系统&#xff1a;Windows 11…

Llama + Dify,在你的电脑搭建一套AI工作流

theme: smartblue 点赞 关注 收藏 学会了 本文简介 最近字节在推Coze&#xff0c;你可以在这个平台制作知识库、制作工作流&#xff0c;生成一个具有特定领域知识的智能体。 那么&#xff0c;有没有可能在本地也部署一套这个东西呢&#xff1f;这样敏感数据就不会泄露了&…

Linux之基础IO(下)

目录 缓冲区的概念 深入理解文件系统 创建文件的整个过程 软链接 硬链接 上一节课我们学习了基础IO中的文件的读写操作&#xff0c;以及文件描述符的概念和重定向的基本原理&#xff0c;本期我们继续进行基础IO的学习。 缓冲区的概念 在讲缓冲区之前&#xff0c;大家先看…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端&#xff1a; 对前端项目在cmd中进行start nginx.exe&#xff0c;端口号为8080 后端&#xff1a; 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录&#xff08;不推荐&#xff09; &#xf…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

使用 Windows 应用程序 SDK 构建下一代应用程序

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

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑤ | 11.13 - 11.14

前言 第11章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于10大管理的内容&#xff0c;学习要以教材为准。本章上午题分值预计在15分。 目录 11.13 制定预算 11.13.1 主要输入 11.13.2 主要输出 11.14 规划质量管理 11.14.1 主要输入 11.14.2 主要工…

HTML前端面试题之<iframe>标签

面试题&#xff1a;iframe 标签的作用是什么?有哪些优缺点 ? 讲真&#xff0c;刷这道面试题之前我根本没有接触过iframe&#xff0c;网课没讲过&#xff0c;项目实战没用过&#xff0c;但却在面试题里出现了&#xff01;好吧&#xff0c;我只能说&#xff1a;前端路漫漫&…

数据挖掘-数据预处理

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 3.3.1 数据的中心趋势平均数和加权平均数众数&#xff0c;中位数和均值描述数据的离散程度 &a…

快速搞定分布式RabbitMQ---RabbitMQ进阶与实战

本篇内容是本人精心整理&#xff1b;主要讲述RabbitMQ的核心特性&#xff1b;RabbitMQ的环境搭建与控制台的详解&#xff1b;RabbitMQ的核心API&#xff1b;RabbitMQ的高级特性;RabbitMQ集群的搭建&#xff1b;还会做RabbitMQ和Springboot的整合&#xff1b;内容会比较多&#…

火山引擎云搜索服务通过信通院向量数据库可信认证

7月16日&#xff0c;首届线下“可信数据库发展大会”在北京举办&#xff0c;会上中国信息通信研究院&#xff08;中国信通院&#xff09;公布了 2024 上半年“可信数据库”产品能力评测结果。火山引擎云搜索服务在基本功能、运维管理、安全性、兼容性、扩展性、高可用、工具生态…

【LeetCode 随笔】C++入门级,详细解答加注释,持续更新中。。。

文章目录 58.【简单】最后一个单词的长度&#x1f31f; &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都…