java Web学习笔记(一)

1. 前置学习知识

JavaScript学习笔记

CSS3学习笔记

html学习笔记

2. Tomcat介绍

前端App的运行环境:

服务器 --> JRE --> Tomcat --> App

Tomcat目录文件介绍

pkRfcDJ.png

  • bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat10.exe、tomcat10w,exe,前者是在控制台下启动Tomcat,后者是弹出GU川窗口启动Tomcat;,如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
  • conf : 配置文件
  • lib : jar包
  • logs : 日志文件,可删除
  • temp :临时文件,可删除
  • webapps : 存放web项目
    • WEB-INF文件夹(不可以直接访问的资源文件)
      • classes目录(字节码根路径)
      • lib目录(外部资源文件)
      • web.xml
    • static
  • work : jsp相关,现在不常用了

标准的可以部署在Tomcat中的app如上图中webapps的文件目录结构所示

URL的组成部分和项目资源的对应关系

http://127.0.0.1:8080/app/idnex.html

URL组成部分项目中资源
协议(http://)
ip地址(127.0.0.1)服务器-硬件 --> 操作系统
端口号(8080)服务器-服务软件 --> webapps
项目的上下文路径(/app)app
具体资源路径(index.html)具体资源路径

idea配置部署tomcat并成功运行一个app-web项目

详情见连接

视频57集

3. HTTP协议介绍(很重要)

HTTP协议和HTTPS的区别

在HTTP1.1到HTTP2.0之间出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本。

HTTP协议的发展
  • 最初阶的http协议:HTTP/0.9,只能返回一个网页

  • 后续发展:HTTP/1.0,支持三种请求方式,有状态码、包含报文头、能够传输HTML以外的文件

  • HTTP/1.1:支持七种请求,另外有以下三个特性:

    • 虚拟主机允许从单个 IP 地址提供多个域
    • 持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求
    • 缓存支持节省了带宽并使响应速度更快。
  • HTTP2和HTTP3,已经发布了,但是整体的使用并不突出

理解HTTP协议
  1. 客户端和服务端交互的方式

请求-响应模式

请求:永远是客户端向服务端发送

响应:永远是服务端向客户端发送

  1. 客户端和服务端交互数据的格式

报文(请求报文):请求时发送的数据

响应(响应报文):响应时返回的数据

报文的格式:

​ 报文首部:行信息 + 头信息

​ 报文主体

  1. HTTP的长链接和短链接问题

前置知识

网络信息传递过程:

pkRzuh8.png

TCP协议下的数据通信(三次握手和四次分手):

pkRzM9S.png

长链接和短链接分解:

html中存在<link>``<script>之类的标签

客户端需要通过这些标签中的地址重新向Tomcat抓取路径,所以需要重新经历三次握手和四次分手的过程。

报文格式

见资料

常见的请求头:

-主机虚拟地址
Host: localhost:8080   
-长连接
Connection: keep-alive 
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1  
- 用户系统信息
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
- 浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:   可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

注意

  • 如果是发送加密的信息最好是使用POST请求发送数据

  • 如果是发送非加密数据且不携带信息,最好是使用GET请求

常见的相应体:

Server: Apache-Coyote/1.1   服务器的版本信息
Accept-Ranges: bytes
ETag: W/"157-1534126125811"
Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
Content-Type: text/html    响应体数据的类型[浏览器根据类型解析响应体数据]
Content-Length: 157   响应体内容的字节数
Date: Mon, 13 Aug 2018 02:47:57 GMT  响应的时间,这可能会有8小时的时区差

报文响应的状态码

状态码状态码英文描述中文含义
1**
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2**
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
3**
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
4**
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
5**
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

4. Servlet简介

动态资源和静态资源

静态资源:在代码运行之前已经写好的资源文件

动态资源:在代码运行过程中动态生成的资源文件

注意:动态资源的过程需要java代码生成需要响应的数据并且转换为响应的报文(参数如果不一样,响应的请求也不一样)

Tomcat接收到请求后的处理过程
  1. tomcat接收到请求后,会将请求报文信息转换为一个HttpServletRequest对象
    • 包含了请求中的所有信息 --> 请求头、请求行、请求体
  2. tomcat同时创建一个HttpServletResponse对象,该对象用于盛装要响应给客户端的信息,并且之后会被转换成响应的报文
    • 包含了响应中的所有信息 --> 响应行、响应头、响应体
  3. 创建自己的Servlet类并且要使其实现Servlet接口
    • 重写抽象方法:service(HttpServletRequest request,HttpServletResponse,response)
      • 从request参数中获取所有请求信息
      • 生成响应给客户端的数据
      • 将响应数据传入response参数
  4. tomcat根据请求中的资源路径找到对应的servlet,将servlet实例化,调用servlet()方法,同时将HttpServletRequest对象和HttpServletResponse对象传入
Tomcat对数据进行验证

Servlet API jar包导入问题

具体见Tomcat导入过程

Content-Type问题
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class UserServlet extends HttpServlet {
    resp.setContentType("text/html");// 设置Content-Type类型
}

url-parttern特别说明

一个servlet-name可以映射多个url-parttern;但是每一个url-parttern只能对应一个servlet-name

在xml标签中表示为:一个servlet-mapping标签可以拥有多个url-pattern标签

url-parttern的精确匹配和模糊匹配

  1. 精确匹配

一般使用/作为通配符

  1. 模糊匹配

一般使用*作为通配符

xml文件映射路径 vs 注解映射路径
<servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>com.itchen.servlet.Servlet1</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
    <url-pattern>/s1</url-pattern>
</servlet-mapping>
@WebServlet("/s2")

通用类

public class Servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet执行了");
    }
}

Servlet的生命周期(了解)

生命周期对应方法执行时机执行次数
构造对象构造器第一次请求或者容器启动1
初始化init()构造完毕后1
处理服务service(HttpServletRequest req,HttpServletResponse resp)每次请求多次
销毁destory()容器关闭1

Servlet接口的继承结构(了解)

pkWJEWV.md.png

Servlet接口中存在的一些方法:

  • void init(ServletConfig var1)
  • ServletConfig getServletConfig();
  • void service(ServletRequest var1, ServletResponse var2)
  • String getServletInfo();
  • void destroy();

GenericServlet类:实现一些基本的Tomcat配置

HttpServlet类:1. 主要的Service方法,方便调用子类的API(相较于父类的API更丰富)

​ 2. 重载的Service方法,获取请求的方式;根据请求方式调用响应的方法(请求的分发 状态码:405 )。

自己的Servlet类:重新实现Service方法 或者 重写doGet()方法和doPost()方法

​ 1. 接收用户的请求信息

​ 2. 做出响应( 状态码:200 )

ServletConfig对象(了解)

作用:为某一个Servlet提供独立的配置参数;表现形式为:获取init-param参数。(可以有多个)

方式:xml配置文件和注解两种方式

ServletContext对象(掌握)

作用:为所有Servlet提供信息(唯一)

// 示例
ServletContext servletContext = getServletContext();

// 获取不同电脑的文件路径
String path = servletContext.getRealPath("upload");
System.out.println(path);

// 获取项目的上下文路径
String contextPath = servletContext.getContextPath();
System.out.println(contextPath);
通过ServletContext对象进行数据的交互(Service方法中)
// 发送数据
ServletContext servletContext = getServletContext();
servletContext.setAttribute("ka","va");
//servletContext.removeAttribute("ka")
// 接收数据
ServletContext servletContext1 = getServletContext();
String ka = (String)servletContext1.getAttribute("ka");
System.out.println(ka);

HttpServletRequest对象

各种API见阿里网盘-备份盘-大学经历-java Web文档

通过URI和URL了解 ip锁定代理服务器

pkWti80.md.png

HttpServletResponse对象

各种API见阿里网盘-备份盘-大学经历-java Web文档

请求转发

通过HttpServletRequest对象实现,服务端内部将请求发送给另一个处理类

请求转发特点(基础,重要)
  • 请求转发通过HttpServletRequest对象获取请求转发器实现
  • 请求转发是服务器内部的行为,对客户端是屏蔽的
  • 客户端只发送了一次请求,客户端地址栏不变
  • 服务端只产生了一对请求和响应对象,这一对请求和响应对象会继续传递给下一个资源
  • 因为全程只有一个HttpServletRequset对象,所以请求参数可以传递,请求域中的数据也可以传递
  • 请求转发可以转发给其他Servlet动态资源,也可以转发给一些静态资源以实现页面跳转
  • 请求转发可以转发给WEB-INF下受保护的资源
  • 请求转发不能转发到本项目以外的外部资源

响应重定向

通过HttpServletResponse对象实现,服务端先返回一个响应,让客户端再发送一个请求,然后服务端的处理类再处理之后发送的请求,并返回响应。

乱码和路径问题

产生原因:

  1. 数据的编码和解码不属于一个字符集
  2. 使用了不支持某种语言的字符集

乱码问题1

对于使用Tomcat中参数获取的时候的因为编码的字符集和解码的字符集有差异,所以会导致Tomcat乱码问题

解决:

  • get请求:在Tomcat配置中对解码字符集进行修改
  • post请求:在源码调用参数前对请求体内的参数的编码方式进行修改

乱码问题2

在页面显示的时候,前端的编码方式不一定和后端的相同。

解决:

  • 在响应头中设置编码方式(甩锅给前端)
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html;charset=UTF-8");
}

请求转发时的编码问题

受保护的资源需要通过请求转发来获取,但是请求转发时不会改变资源的访问路径。这造成了资源的字节码文件路径和在编码中的磁盘结构路径不一致,最终导致了资源访问失败。

相对路径和绝对路径

重定向中的路径问题

和上面文档中的一致

请求转发时的路径问题

相对路径和上面文档一致,绝对路径不需要再添加项目的上下文

绝对路径通解:将项目的上下文环境设置为/

出现hamcrest错误是因为Test测试的问题,老版本mysql记得在连接url上加上设置

5. 会话管理

客户端和服务端之间的多次请求和响应

会话管理是服务器端通过客户端的状态来对客户端进行管理和记录

技术手段:

通过cookie和session配合记录请求状态

cookie的使用

cookie是一个键值型的对象,它在服务器产生,随着响应传会浏览器,如果浏览器对软件中的地址再次访问,cookie将在每次请求中携带。除非浏览器关闭过后再次使用,这个cookie才会消失。

cookie的分类

会话级cookie 直到浏览器关闭结束

持久化cookie 自定义最大时效时间

Session的使用

先获取session对象

HttpSession session = req.getSession();

向Session中存入数据

session.setAttribute("username",username);

注意: Session被用于存储在浏览器中,如果打开另一个客户端,将不会存储原客户端中的Session

客户端每次申请Session对象,服务器都会产生并发送给服务器端
Session每次请求的时效性只有30分钟,可以在web-config中修改

三大域对象
  • web项目中,我们一定要熟练使用的域对象分别是请求域,会话域,应用域

  • 请求域对象是HttpServletRequest,传递数据的范围是一次请求之内及请求转发

  • 会话域对象是HttpSession,传递数据的范围是一次会话之内,可以跨多个请求

  • 应用域对象是ServletContext,传递数据的范围是本应用之内,可以跨多个会话

API功能
void setAttribute(String name,String value)向域对象中添加、修改数据
Object getAttribute(String name)从域对象中获取数据
removeAttribute(String name)移除域对象中的数据
三大域对象一般存放数据
请求域本次业务有关数据
会话域本次会话客户端有关数据
应用域本程序有关数据,eg.Spring框架的IOC容器

6. 过滤器

过滤器是作用目标资源请求的技术规范。javaEE技术规范,javaWeb项目中最最使用的技术之一。

应用场景:登录……

对于一个请求过滤器不止能有一个,多个过滤器会形成过滤器链

生命周期

  1. 构造(X)
  2. 初始化
  3. 过滤
  4. 销毁

注意:filter和servlet不同点在于:filter不能由java控制构造和初始化;而servlet可以

过滤器链

在web.xml中配置filter-mapping的顺序决定了过滤器的工作顺序

使用注解的形式取代xml配置文件

@WebFilter(
    filterName = "loggingFilters",
    initParams = {@WebInitParam(name="dateTimePattern",value="yyyy-MM-dd HH:mm:ss")},
    urlPatterns = {"/servletA","*.html"},
    servletNames = {"servletBName"}
)

7.监听器

在域对象中发生一些事件的时候自动触发一些代码的执行

ServletContextListener监听器在springspringMVC中使用最多

监听对象作用域的相应类或接口
域对象本身变化ServletContextListener
域对象中数据的变化ServletContextAttributeListener
监听Session域的变化HttpSessionListener

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode判断二分图

判断二分图 图的问题肯定要用到深度优先遍历或者广度优先遍历&#xff0c;但又不是单纯的深度优先遍历算法和广度优先遍历算法&#xff0c;而是需要在遍历的过程中加入与解决题目相关的逻辑。 题干中说了&#xff0c;这个图可能不是连通图&#xff0c;这个提示有什么作用呢&a…

【状态估计】非线性非高斯系统的状态估计——离散时间的批量估计

上一篇文章介绍了离散时间的递归估计&#xff0c;本文着重介绍离散时间的批量估计。 上一篇位置&#xff1a;【状态估计】非线性非高斯系统的状态估计——离散时间的递归估计。 离散时间的批量估计问题 最大后验估计 目标函数 利用高斯-牛顿法来解决估计问题的非线性版本&a…

了解Adam和RMSprop优化算法

优化算法是机器学习和深度学习模型训练中至关重要的部分。本文将详细介绍Adam&#xff08;Adaptive Moment Estimation&#xff09;和RMSprop&#xff08;Root Mean Square Propagation&#xff09;这两种常用的优化算法&#xff0c;包括它们的原理、公式和具体代码示例。 RMS…

Studying-代码随想录训练营day34| 62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树

第34天&#xff0c;动态规划part02&#xff0c;牢记五部曲步骤&#xff0c;编程语言&#xff1a;C 目录 62.不同路径 63.不同路径II 343.整数拆分 96.不同的二叉搜索树 总结 62.不同路径 文档讲解&#xff1a;代码随想录不同路径 视频讲解&#xff1a;手撕不同路径 题目…

AI赋能,全面筑牢防线:重点非煤矿山重大灾害风险防控系统探析

一、背景需求 随着工业化和现代化的快速发展&#xff0c;非煤矿山作为重要的资源开采基地&#xff0c;其安全生产问题日益受到社会各界的广泛关注。非煤矿山在开采过程中&#xff0c;面临着诸多重大灾害风险&#xff0c;如滑坡、坍塌、水害、火灾等&#xff0c;这些灾害一旦发…

C基础day7

一、思维导图 二、课后练习 1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include<myhead.h> #define M 20 int main(int argc, const char *argv[]) {int sum_a0,sum_b0,sum_c0,sum_d0;char str[M];printf("please en…

用流式数据库解决「自动化检测服务器性能异常」难题

对 DevOps 团队来说&#xff0c;检测大量服务器的性能异常并尽快响应一直是个挑战。他们设置了各种指标来监控服务器性能&#xff0c;但诊断性能问题复杂且耗时&#xff0c;因为诊断数据的量可能非常大。越来越多的人认为这个过程应该自动化。但怎么做呢&#xff1f; 流式系统…

Chromium编译指南2024 Linux篇-同步Chromium第三方库(四)

1.引言 在成功拉取Chromium源码并创建新分支后&#xff0c;我们需要进一步配置开发环境。这包括拉取必要的第三方库以及设置hooks&#xff0c;以确保我们能够顺利进行编译和开发工作。以下步骤将详细介绍如何进行这些配置。 2.拉取第三方库以及hooks Chromium 使用了大量的第…

2024年7月1日,公布的OpenSSH的漏洞【CVE-2024-6387】

目录 ■概要 ■概要&#xff08;日语&#xff09; ■相关知识 openssh 和 ssh 有区别吗 如何查看 openssh的版本 漏洞描述 glibc Linux是什么 如何查看系统是不是基于 Gibc RHEL Linux 是基于Glibc的Linux吗 还有哪些 Linux版本是基于 GNU C库&#xff08;glibc&…

opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

看视频的时候有的视频文件名贼长。想要翻看&#xff0c;在文件夹里根本显示不出来&#xff0c;缩短又会丢失一些信息&#xff0c;所以我写了一份Python代码&#xff0c;直接获取视频的名字&#xff0c;时长&#xff0c;帧率&#xff0c;还有分辨率写到excel里。 实际效果如下图…

【2024——CUMCM】Matlab快速入门

目录 常识 disp and input 字符串合并 sum 提取矩阵指定位置的元素 指定行列 指定行or指定列&#xff08;返回行/列向量&#xff09; 指定某些行 指定全部元素&#xff0c;按列拼接 size repmat 矩阵的运算 基本运算 形状相同的矩阵运算 每个元素同时和常数相乘或相…

gitee及git的简单使用、下载教(保姆级教程)

前言&#xff1a; GitHub&#xff0c;一个由外国研发的代码开源网站&#xff0c;我们可以通过它获得别人优秀的项目源码&#xff0c;也可以在上面上传自己的劳动成果。但是&#xff0c;我们很难访问外网。于是&#xff0c;我们将目光转向国内一个类似的网站---码云&#xff08…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…

OR-3H7-4晶体管光耦,可对标替代TLP281-4等

提供隔离反馈 逻辑电路之间的接口 提供1通道和4通道 电平转换 DC和AC输入 SMPS中的调节反馈电路 消除接地环路 特征 电流传输比&#xff1a;IF 1mA&#xff0c;VCE 5V&#xff0c;Ta 25 C时最小50% 高输入输出隔离电压。&#xff08;VISO3&#xff0c;750Vrms&#xf…

MySQL GROUP_CONCAT 函数详解与实战应用

提示&#xff1a;在需要将多个值组合成一个列表时&#xff0c;GROUP_CONCAT() 函数为 MySQL 提供了一种强大的方式来处理数据 文章目录 前言什么是 GROUP_CONCAT()基本语法 示例使用 GROUP_CONCAT()去除重复值排序结果 前言 提示&#xff1a;这里可以添加本文要记录的大概内容…

16:9横屏短视频素材库有哪些?横屏短视频素材网站分享

在这个视觉内容至关重要的时代&#xff0c;16:9横屏视频因其宽广的画面和优越的观赏体验&#xff0c;已经成为无数创作者和营销专家的首选格式。但要创造出吸引人的横屏视频&#xff0c;高质量的视频素材库是不可或缺的。不管你是资深视频制作人还是刚入行的新手&#xff0c;下…

Proteus + Keil单片机仿真教程(五)多位LED数码管的静态显示

Proteus + Keil单片机仿真教程(五)多位LED数码管 上一章节讲解了单个数码管的静态和动态显示,这一章节将对多个数码管的静态显示进行学习,本章节主要难点: 1.锁存器的理解和使用; 2.多个数码管的接线封装方式; 3.Proteus 快速接头的使用。 第一个多位数码管示例 元件…

Maven在Windows中的配置方法

本文介绍在Windows电脑中&#xff0c;下载、配置Maven工具的详细方法。 Maven是一个广泛使用的项目管理工具&#xff0c;主要针对Java项目&#xff0c;但也可以用于其他类型的项目&#xff1b;其由Apache软件基金会维护&#xff0c;旨在简化和标准化项目构建过程&#xff0c;依…

库存软件有永久免费版吗?

随着商品种类的增加和供应链的日益复杂&#xff0c;如何高效、准确的追踪库存数量&#xff0c;预测需求&#xff0c;减少积压或缺货&#xff0c;成为许多商家头疼的问题&#xff0c;找一款合适的库存管理软件成为当务之急。但是&#xff0c;高昂的购买成本让中小企业望而却步。…

职场必看:如何用AI打造完美简历和面试准备

如何用AI打造完美简历和面试准备 1. 未来简历AI平台:开启个性化简历制作 想要在职场上留下深刻印象?首先,你需要一份出色的简历。未来简历AI平台让你通过简单的扫码和输入信息,快速开始简历制作。 2. 简历模板:选择适合你的岗位模板 面对众多简历模板,如何挑选?平…