【Spring Boot 入门一】构建你的第一个Spring Boot应用
一、引言
在当今的软件开发领域,Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸,为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程,让开发者能够专注于业务逻辑的实现。无论是构建小型的微服务还是大型的企业级应用,Spring Boot都能发挥巨大的作用。想象一下,你可以在短时间内搭建起一个功能完备、可运行的Java应用,并且无需繁琐的配置,这将大大提高开发效率,减少开发周期。这就是Spring Boot的魅力所在,也是我们深入学习它的原因。
二、环境搭建
(一)安装Java开发环境(JDK)
- Windows系统下JDK安装步骤
- 首先,访问Oracle官方网站或者OpenJDK官方网站,下载适合你Windows系统版本(32位或64位)的JDK安装包。例如,如果你使用的是64位Windows 10系统,可以下载JDK 11的64位版本。
- 下载完成后,双击安装包,按照安装向导的提示进行安装。在安装过程中,可以选择安装路径,建议使用默认路径或者选择一个容易记忆且不包含中文和特殊字符的路径,如“C:\Program Files\Java\jdk - 11”。
- 安装完成后,需要配置环境变量。右键点击“此电脑”,选择“属性”,然后点击“高级系统设置”。在“系统属性”窗口中,点击“环境变量”按钮。在“系统变量”中找到“Path”变量,点击“编辑”。在变量值的末尾添加“;C:\Program Files\Java\jdk - 11\bin”(这里的路径是根据你安装JDK的实际路径而定)。
- Linux系统下JDK安装步骤
- 对于基于Debian或Ubuntu的系统,可以使用命令行安装OpenJDK。打开终端,输入以下命令:
sudo apt - update
:更新软件包列表。sudo apt - install openjdk - 11 - jdk
:安装OpenJDK 11。
- 对于基于Red Hat或CentOS的系统,可以使用yum命令安装。例如:
yum install java - 11 - openjdk - devel
。
- 安装完成后,可以通过在终端输入
java - version
命令来验证JDK是否安装成功。
- 对于基于Debian或Ubuntu的系统,可以使用命令行安装OpenJDK。打开终端,输入以下命令:
(二)选择集成开发环境(IDE)
- Eclipse
- Eclipse是一个开源的、功能强大的Java集成开发环境。它具有丰富的插件生态系统,可以满足各种开发需求。例如,对于Web开发,可以安装Eclipse Web Tools Platform(WTP)插件。Eclipse的界面布局简洁明了,对于初学者来说比较容易上手。它的代码编辑功能强大,支持代码自动补全、语法检查等功能。
- IntelliJ IDEA
- IntelliJ IDEA是一款商业的Java开发工具,也有社区版可供免费使用。它以智能的代码编辑功能而闻名,例如,它能够根据上下文自动推断代码的意图,提供非常精准的代码补全建议。它对Spring Boot项目有很好的支持,在创建、运行和调试Spring Boot应用时非常方便。
- 以IntelliJ IDEA为例,基本配置如下:
- 下载并安装IntelliJ IDEA社区版或者旗舰版。安装完成后,打开IntelliJ IDEA。
- 在首次启动时,可以选择导入已有的项目或者创建新项目。对于Spring Boot项目,我们后续会详细介绍创建过程。
- 在设置中,可以配置JDK的路径。点击“File”->“Project Structure”,在“SDKs”选项卡中添加JDK的安装路径。
三、创建第一个Spring Boot项目
(一)使用Spring Initializr创建项目
- 访问Spring Initializr网站
- Spring Initializr是一个在线的工具,用于快速创建Spring Boot项目的基础结构。可以通过访问https://start.spring.io/来使用它。
- 选择项目依赖(如Web、Actuator等)
- 在Spring Initializr的页面上,有很多配置选项。首先,选择项目的构建工具,Maven或者Gradle。这里我们以Maven为例。
- 然后选择项目的语言为Java,Spring Boot的版本(可以选择较新的稳定版本,如2.5.x)。
- 在“Dependencies”(依赖)部分,添加“Web”依赖。这将为我们的项目添加Spring Web相关的库,使得我们能够构建Web应用,例如创建RESTful API。如果想要添加应用的监控功能,可以添加“Actuator”依赖。
- 下载项目压缩包并导入IDE
- 完成配置后,点击“Generate”按钮,Spring Initializr会生成一个包含项目基础结构的压缩包。
- 将下载的压缩包解压到本地磁盘的一个目录中。然后在IntelliJ IDEA中,选择“File”->“Open”,找到解压后的项目目录,点击“OK”来导入项目。
(二)项目结构分析
- 主程序类的作用
- 在Spring Boot项目中,有一个主程序类,通常带有
@SpringBootApplication
注解。例如:
package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);} }
- 这个注解是一个组合注解,它包含了
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
等注解。@Configuration
表示这个类是一个配置类,可以在其中定义Bean等配置信息;@EnableAutoConfiguration
会自动根据项目的依赖和配置进行自动配置,例如,如果添加了Web依赖,它会自动配置Web相关的组件;@ComponentScan
会扫描指定包及其子包下的带有@Component
、@Service
、@Repository
等注解的类,并将它们注册为Spring容器中的Bean。
- 在Spring Boot项目中,有一个主程序类,通常带有
- 介绍资源文件夹(resources)中的配置文件
- 在
resources
文件夹下,有一个application.properties
或者application.yml
文件(如果没有添加其他配置文件的话)。这些文件用于配置Spring Boot应用的各种属性,如服务器端口、数据库连接等。例如,在application.properties
中可以设置服务器端口为8081:
server.port = 8081
- 在
- 说明包结构和类的组织方式
- 在项目中,通常按照功能模块来组织包结构。例如,可以有
com.example.demo.controller
包用于存放控制器类,com.example.demo.service
包用于存放服务类,com.example.demo.repository
包用于存放数据访问层的类。这样的组织方式使得项目结构清晰,便于维护和扩展。
- 在项目中,通常按照功能模块来组织包结构。例如,可以有
四、编写第一个简单的API
(一)创建一个简单的RESTful API
- 使用
@RestController
注解创建控制器类- 在
com.example.demo.controller
包下创建一个名为HelloController
的类,代码如下:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RestController;@RestController public class HelloController { }
@RestController
注解是一个组合注解,它包含了@Controller
和@ResponseBody
注解。@Controller
表示这个类是一个控制器类,用于处理HTTP请求;@ResponseBody
表示方法的返回值将直接作为HTTP响应体返回,而不是作为视图名进行解析。
- 在
- 编写一个简单的方法返回固定字符串
- 在
HelloController
类中添加一个方法:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class HelloController {@RequestMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";} }
- 这里的
@RequestMapping
注解用于将HTTP请求映射到这个方法上。当客户端发送一个GET请求到/hello
路径时,这个方法就会被调用,并返回“Hello, Spring Boot!”这个字符串。
- 在
- 讲解
@RequestMapping
注解的基本用法@RequestMapping
注解可以用在类和方法上。当用在类上时,它表示这个类中的所有方法的请求路径都将以这个类上的@RequestMapping
注解的值为前缀。例如:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/api") public class HelloController {@RequestMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";} }
- 此时,
sayHello
方法对应的请求路径是/api/hello
。@RequestMapping
注解还可以指定请求方法(如GET、POST等),例如:
@RequestMapping(value = "/hello", method = RequestMethod.POST)
- 这表示这个方法只处理POST请求到
/hello
路径的情况。
(二)运行项目并测试API
- 在IDE中运行Spring Boot项目
- 在IntelliJ IDEA中,可以直接点击主程序类中的
main
方法旁边的绿色运行按钮来运行项目。项目启动后,可以在控制台看到启动日志,其中包含了应用启动的相关信息,如服务器启动在哪个端口等。
- 在IntelliJ IDEA中,可以直接点击主程序类中的
- 使用Postman或浏览器测试API
- 如果使用浏览器测试,可以在浏览器的地址栏中输入
http://localhost:8080/hello
(如果没有修改服务器端口的话),就可以看到浏览器显示“Hello, Spring Boot!”。 - 如果使用Postman测试,可以打开Postman,创建一个新的GET请求,输入
http://localhost:8080/hello
作为请求地址,然后点击“Send”按钮,在响应体中就可以看到“Hello, Spring Boot!”这个结果。
- 如果使用浏览器测试,可以在浏览器的地址栏中输入
五、深入理解自动配置
(一)什么是Spring Boot自动配置
- 解释自动配置的概念和原理
- Spring Boot的自动配置是其核心特性之一。它基于条件注解(如
@Conditional
系列注解)来根据项目的依赖和环境自动配置Spring容器中的Bean。例如,当项目中添加了spring - web
依赖时,Spring Boot会自动配置一个嵌入式的Web服务器(如Tomcat),并且配置相关的Servlet、Filter等组件。 - 原理上,Spring Boot在启动时会扫描类路径下的各种配置类和Bean定义。对于自动配置类,它们会根据条件判断是否需要进行配置。这些条件可以基于类是否存在、环境变量是否设置、配置文件中的属性是否满足等。例如,有一个自动配置类可能会检查类路径下是否存在某个数据库驱动类,如果存在,则会自动配置数据库连接相关的Bean。
- Spring Boot的自动配置是其核心特性之一。它基于条件注解(如
- 举例说明自动配置如何简化开发
- 假设我们要创建一个简单的Web应用,在传统的Spring开发中,我们需要手动配置一个Web服务器,如Tomcat。这包括创建
Tomcat
实例,配置端口号,设置Servlet上下文等一系列复杂的操作。而在Spring Boot中,只需要添加spring - web
依赖,Spring Boot就会自动配置好一个嵌入式的Tomcat服务器,并且默认将服务器端口设置为8080。我们可以直接编写业务逻辑代码,无需关心Web服务器的底层配置。
- 假设我们要创建一个简单的Web应用,在传统的Spring开发中,我们需要手动配置一个Web服务器,如Tomcat。这包括创建
(二)查看自动配置的生效情况
- 使用
@Conditional
相关注解的例子- 我们可以创建一个自定义的自动配置类来演示。首先创建一个名为
MyAutoConfiguration
的类:
package com.example.demo.config;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration;@Configuration @ConditionalOnClass(name = "javax.servlet.Servlet") public class MyAutoConfiguration {// 这里可以定义一些Bean或者配置信息 }
- 这个自动配置类使用了
@ConditionalOnClass
注解,它表示只有当类路径下存在javax.servlet.Servlet
类时,这个自动配置类才会生效。
- 我们可以创建一个自定义的自动配置类来演示。首先创建一个名为
- 在日志中查看自动配置的加载信息
- 在项目启动时,可以在控制台的启动日志中查看自动配置的加载情况。Spring Boot会打印出哪些自动配置类被加载了,哪些被排除了(如果有)。例如,可以看到类似这样的日志:
o.s.b.a.autoconfigure.web.servlet.WebMvcAutoConfiguration : WebMvcAutoConfiguration matched: - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
- 这表示
WebMvcAutoConfiguration
这个自动配置类被加载了,并且满足了@ConditionalOnClass
注解的条件。
六、总结与展望
在这篇文章中,我们从Spring Boot的环境搭建开始,包括JDK的安装和IDE的选择,然后使用Spring Initializr创建了第一个Spring Boot项目,并详细分析了项目的结构。接着编写了一个简单的RESTful API,深入理解了@RestController
和@RequestMapping
等注解的用法,还运行项目并进行了API测试。最后,我们深入探讨了Spring Boot的自动配置特性,包括其概念、原理、示例以及如何查看自动配置的生效情况。通过这些内容,大家应该对Spring Boot有了一个初步的认识和理解。在下一篇文章中,我们将深入探讨Spring Boot中的配置文件,包括不同类型的配置文件、自定义配置属性以及配置文件与不同环境的关系等内容,进一步深入Spring Boot的世界。
相关文章:
【Spring Boot 入门一】构建你的第一个Spring Boot应用
一、引言 在当今的软件开发领域,Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸,为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程,让开发者能够专注于业务逻辑的实现。无论是构建小型的…...
PPT 快捷键使用、技巧
前言: 本文操作是以office 2021为基础的,仅供参考;不同版本office 的 ppt 快捷键 以及对应功能会有差异,需要实践出真知。 shift 移动 水平/垂直 移动 ; shift 放大/缩小 等比例放大 缩小 ; 正圆 正…...
Web安全 - 文件上传漏洞(File Upload Vulnerability)
文章目录 OWASP 2023 TOP 10导图定义攻击场景1. 上传恶意脚本2. 目录遍历3. 覆盖现有文件4. 文件上传结合社会工程攻击 防御措施1. 文件类型验证2. 文件名限制3. 文件存储位置4. 文件权限设置5. 文件内容检测6. 访问控制7. 服务器配置 文件类型验证实现Hutool的FileTypeUtil使用…...
vue3中el-input在form表单按下回车刷新页面
摘要: 在input框中点击回车之后不是调用我写的回车事件,而是刷新页面! 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 ,并设置style“display:none” <ElInput style"display…...
SQL Server中关于个性化需求批量删除表的做法
在实际开发中,我们常常会遇到需要批量删除表,且具有共同特征的情况,例如:找出表名中数字结尾的表之类的,本文我将以3中类似情况为例,来示范并解说此类需求如何完成: 第一种,批量删除…...
关于按键状态机解决Delay给程序带来的问题
问题产生 我在学习中断的过程中,使用EXTI15外部中断,在其中加入HAL_Delay();就会发生报错 错误地方 其它地方配置 问题原因 在中断服务例程(ISR)中使用 HAL_Delay() 会导致问题的原因是: 阻塞性: HAL_D…...
62.【C语言】浮点数的存储
目录 1.浮点数的类型 2.浮点数表示的范围 3.浮点数的特性 《计算机科学导论》的叙述 4.浮点数在内存中的存储 答案速查 分析 前置知识:浮点数的存储规则 推导单精度浮点数5.5在内存中的存储 验证 浮点数取出的分析 1.一般情况:E不全为0或不全为1 2.特殊情况:E全为0…...
GO网络编程(一):基础知识
1. 网络编程的基础概念 TCP/IP 协议栈 TCP/IP 是互联网通信的核心协议栈,分为以下四个层次: 应用层(Application Layer):为应用程序提供网络服务的协议,比如 HTTP、FTP、SMTP 等。传输层(Tra…...
【Linux】用虚拟机配置Ubuntu环境
目录 1.虚拟机安装Ubuntu系统 2.Ubuntu系统的网络配置 3.特别声明 首先我们先要下载VMware软件,大家自己去下啊! 1.虚拟机安装Ubuntu系统 我们进去之后点击创建新的虚拟机,然后选择自定义 接着点下一步 再点下一步 进入这个界面之后&…...
酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构
一、代码 int 酒店标识_int Convert.ToInt32(酒店标识);StringBuilder 锁号2024 new StringBuilder(8);//信息 "未知返回值:" bufCard_原始;GetGuestLockNoByCardDataStr_原始(酒店标识_int, bufCard_原始.ToString(), 锁号2024);StringBuilder 退…...
Gitのrebase用法
在 Git 中,rebase 是一种用于整合多个提交历史的操作,它可以将一个分支的变更“重放”到另一个分支上。与 merge 不同,rebase 会产生一个线性的提交历史,使得项目的历史记录更加整洁和易于理解。 1. 什么是 Rebase? …...
二分查找一>:在排序数组中查找元素的第一个和最后一个位置
1.题目: 2.解析:这里不能用传统二分,因为涉及范围,传统二分时间复杂度会降为O(N),要做些改动。 步骤一:查找区间左端点 细节图: 步骤二:查找区间右端点: 细节图: 代码…...
undeclared identifier ‘UNITY_PREV_MATRIX_M‘ - Unity Shader自己写URP,引用内部 hlsl
碰到这样的问题,居然非常淡定 这个链接里说了问题: 一个哥们A问,为什么include urp common.hlsl 提示莫名其妙 另一个哥们B说,这个issue 说了,可能是这个原因(也没正面答) 从issue我们知道&a…...
信息安全工程师(29)存储介质安全分析与防护
前言 存储介质安全分析与防护是确保数据安全与完整性的重要环节。存储介质,如硬盘、U盘、SD卡等,作为数据的载体,其安全性直接关系到数据的安全。 一、存储介质安全分析 1. 数据泄露风险 格式化不彻底:传统的格式化操作往往只能删…...
Html5知识点介绍
HTML5 是 HTML 的最新版本,它引入了许多新特性和元素来增强 Web 开发的能力和灵活性。以下是一些关键的 HTML5 知识点: 1. 语义化标签 HTML5 增加了许多新的语义化标签,用来更好地定义页面结构和内容,这些标签使代码更加清晰易读&…...
探索机器学习中的特征选择技术
在机器学习和数据科学领域,特征选择是一个关键步骤,它不仅有助于提高模型的性能,还能帮助我们更好地理解数据。本文将深入探讨特征选择的重要性、常见方法以及如何在实际项目中应用这些技术。 一、特征选择的重要性 降低维度:减…...
数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块
9月24日,2024大模型数字生态发展大会暨“铸基计划”年中会议在北京召开。会上,中国信通院发布了2024年《高质量数字化转型产品及服务全景图(上半年度)》和《高质量数字化转型技术解决方案(上半年度)》等多项…...
什么是分布式数据库
分布式数据库(Distributed Database)是一种数据库系统,它的数据被存储在不同的物理位置,但对用户来说表现得就像一个单一的、统一的数据库。这种系统由多个自治的数据库站点组成,这些站点通过网络相互连接,…...
从u盘直接删除的文件能找回吗 U盘文件误删除如何恢复
U盘上的文件被删除并不意味着它们立即消失。事实上,删除操作只是将文件从文件系统的目录中移除,并标记可用空间。这意味着在文件被覆盖之前,它们仍然存在于存储介质上。因此,只要文件没有被新的数据覆盖,我们就有机会恢…...
如何使用ssm实现基于HTML的中国传统面食介绍网站的搭建+vue
TOC ssm758基于HTML的中国传统面食介绍网站的搭建vue 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔…...
【生成模型】学习笔记
生成模型 生成模型概述(通俗解释) 生成的核心是生成抽象化的内容,利用已有的内容生成没有的/现实未发生的内容。这个过程类似于人类发挥想象力的过程。 生成模型的应用场景非常广泛,可以应用于艺术表达,如画的生成、…...
大语言模型知识点分享
1 目前主流的开源模型体系有哪些? Prefix Decoder 系列模型 核心点: 输入采用双向注意力机制,输出为单向注意力。双向注意力意味着输入的每个部分都可以关注到输入的所有其他部分,这在理解上下文时具有很强的优势。 代表模型&a…...
openpnp - 底部相机高级校正的参数设置
文章目录 openpnp - 底部相机高级校正的参数设置概述笔记修改 “Radial Lines Per Calibration Z” 的方法不同 “Radial Lines Per Calibration Z”的校验结果不同 “Radial Lines Per Calibration Z”的设备校验动作的比较总结备注END openpnp - 底部相机高级校正的参数设置 …...
劳动与科技、艺术结合更好提高劳动教育意义
在中小学教育中,劳动教育是培养学生基本生活技能和劳动习惯的重要环节。但当代的劳动教育不在单纯的劳动,而是劳动技能的提升与学习,通过学习劳动技能与实践活动,强化劳动教育与其他课程的融合,学生深刻理解劳动的意义…...
基于Hive和Hadoop的招聘分析系统
本项目是一个基于大数据技术的招聘分析系统,旨在为用户提供全面的招聘信息和深入的职位市场分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark 为核…...
目标检测评价指标
混淆矩阵(Confusion Matrix) 准确率(accuracy) 准确率:预测正确的样本数 / 样本数总数 (正对角线 / 所有) 精度(precision) 精度:预测正确里面有多少确实是…...
解决VRM格式模型在Unity中运行出现头发乱飞等问题
1、问题 通过VRoidStudio制作导出的vrm格式的模型,放在unity中使用时,一运行就会出现头发乱飞,没有自然下垂的问题 2、解决方法 将模型下的secondary中的所有VRM Spring Bone脚本中的Drag Force改为1,Hit Radius改为0 修改后…...
消息中间件---初识(Kafka、RocketMQ、RabbitMQ、ActiveMQ、Redis)
1. 简介 消息中间件是一种支撑性软件系统,它在网络环境中为应用系统提供同步或异步、可靠的消息传输。消息中间件利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。它支持多种通信协议和数据格式,…...
MySQL高阶2010-职员招聘人数2
目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…...
【Java】—— 集合框架:Collection接口中的方法与迭代器(Iterator)
目录 1. 集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 1.3 Java集合框架体系 1.4 集合的使用场景 2. Collection接口及方法 2.1 添加 2.2 判断 2.3 删除 2.4 其它 3. Iterator(迭代器)接口 3.1 Iterator接口 3.2 迭代器的执行原理 3.3 foreach循环 1. 集…...
建晨网站建设有限公司/seo网站优化推广教程
原文:ASP.NET MVCEF框架EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)ASP.NET MVCEF框架EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 (5):前台Jquery easyUI实现 (6):EF上下…...
html5网站开发/wordpress免费网站
队名:日不落战队 安琪(队长) 今天完成的任务组织第五次站立式会议(半冲刺总结交流会)。完成草稿箱前端界面。明天的计划回收站前端界面。尝试去调用数据。还剩下的任务信息修改前端界面。遇到的困难版本升级导致了一些…...
做一个独立站需要多少钱/佛山百度关键词排名
苏生不惑第359 篇原创文章,将本公众号设为星标,第一时间看最新文章。之前分享过的网站我都整理到博客上了https://blog-susheng.vercel.app/ ,方便搜索查看,这里继续分享几个你可能需要的网站:朋友圈截图生成器不要再群…...
宏志建设有限公司网站/中国最新消息
最近想往Android 转型,所以又重新捡起Android学习。看了一下各位大神的文章,说的比较乱,因为版本不一样所以搭建过程也不一样,我在这里说一下最简单快捷的方式。(PS:那时候搭建环境好复杂啊,要下SDK,要下载…...
做网站应该先从什么地方开始/广告主资源哪里找
hahaha~~~,开始写第一个python处理数据脚本,虽然花了些时间,但还是挺开心滴~ 需求描述如下: 有若干图片命名格式为:id_姓名,如下: 现要求根据excel表中内容,批量重命名图片为&…...
成都网站建设优秀公司/seo工作职位
实现目标 昨天晚上看完碟中谍后,有点小激动,然后就有了这片文章。 我们将猫眼上碟中谍的全部评论保存下来,用于后期分析~ 总共评论3W条左右。 逻辑梳理 猫眼PC网页只能查看热门评论,只有在手机端页面才能查看全部评论。…...