Flask 介绍
Flask 介绍
- 为什么要学 Flask
- 框架对比
- 设计哲学
- 功能特点
- 适用场景
- 学习曲线
- 总结
- Flask 的特点
- Flask 常用扩展包
- Flask 的基本组件
- Flask 的应用场景
- 官方文档
- 官方文档链接
- 文档内容概述
- 学习建议

Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它旨在让 Web 开发变得快速、简单且有趣。Flask 鼓励使用 RESTful 设计原则和 Python 的灵活性来创建 Web 应用。由于其轻量级和灵活性,Flask 特别适合小型项目、Web 服务的原型制作以及大型应用的快速开发。
为什么要学 Flask
学习 Flask 有多个原因,这个轻量级的 Web 应用框架为开发者提供了许多优势,特别是在快速开发、灵活性、社区支持和扩展性方面。以下是一些学习 Flask 的主要原因:
-
快速开发:
Flask 的核心非常简单,这使得它成为快速开发小型到中型 Web 应用的理想选择。通过简单的装饰器语法,你可以轻松地定义路由和视图函数,从而快速构建出应用的原型或完整版本。 -
灵活性:
Flask 提供了足够的灵活性,允许开发者根据自己的需求选择合适的工具和库。与 Django 这样的全栈框架相比,Flask 不强制你使用特定的数据库、模板引擎或表单验证工具。相反,它鼓励你使用最适合你项目需求的工具和库。 -
轻量级:
由于 Flask 的核心非常轻量,它不会给你的应用带来不必要的负担。这意味着你的应用可以更快地启动和运行,同时也更容易在资源受限的环境中部署。 -
丰富的扩展库:
Flask 社区提供了大量的扩展库(Flask-Extensions),这些扩展库提供了各种功能,如数据库集成、用户认证、表单验证、文件上传等。通过使用这些扩展库,你可以快速地为你的应用添加新功能,而无需从头开始编写大量代码。 -
易于学习和使用:
Flask 的语法简洁明了,学习曲线相对较低。即使你是 Python 或 Web 开发的新手,也可以通过阅读官方文档和教程来快速掌握 Flask 的基本用法。此外,Flask 的社区也非常活跃,你可以通过论坛、Stack Overflow 和其他渠道寻求帮助和解答问题。 -
RESTful API 开发:
Flask 鼓励使用 RESTful 设计原则来开发 Web 应用和 API。通过使用 Flask-RESTful 或其他类似的扩展库,你可以轻松地构建出符合 RESTful 风格的 API,从而为你的应用提供强大的数据交互能力。 -
社区支持:
Flask 拥有一个庞大且活跃的社区,这个社区提供了大量的教程、示例代码、插件和工具。通过参与社区讨论和贡献,你可以不断提升自己的技能水平,并与其他开发者分享经验和知识。 -
适合小型项目和原型开发:
对于小型项目或需要快速原型的场景,Flask 是一个非常好的选择。它可以帮助你快速构建出应用的基本框架和功能,以便在后续阶段进行更深入的开发和优化。 -
可扩展性:
虽然 Flask 是轻量级的,但它并不意味着它不能用于大型项目。通过合理的架构设计和使用适当的扩展库,你可以将 Flask 应用扩展到大型项目的规模。此外,Flask 还提供了与其他 Python 框架和库(如 Django、Celery、Redis 等)的集成能力,这使得它更加灵活和可扩展。
综上所述,学习 Flask 可以帮助你快速构建出功能丰富、易于维护和扩展的 Web 应用和 API。无论你是初学者还是经验丰富的开发者,都可以通过学习 Flask 来提升自己的技能水平并开发出高质量的 Web 应用。
框架对比
Flask与其他框架(如Django、FastAPI等)的对比,主要体现在设计哲学、功能特点、适用场景以及学习曲线等方面。
设计哲学
-
Flask:
- 被称为“微框架”,其核心非常轻量,只提供了基础的Web功能。
- 设计哲学是“微核心”加上灵活的扩展,允许开发者根据需要添加额外的功能。
-
Django:
- 是一个功能完备的全栈框架,提供了包括ORM、模板引擎、表单处理、认证模块等在内的众多内置功能。
- 强调快速开发和干净、实用的设计,适合构建复杂的Web应用程序。
-
FastAPI:
- 是一个基于异步编程的现代化框架,旨在创建快速、简单而又健壮的APIs。
- 强调高性能和低延迟,特别适合处理大量并发请求和实时数据交互的应用。
功能特点
| 框架 | 功能特点 |
|---|---|
| Flask | 轻量级、灵活、易于扩展,提供了基本的路由、模板引擎等功能。 |
| Django | 全能型框架,提供了强大的内置功能,如ORM、认证、管理界面等。 |
| FastAPI | 高性能、支持异步编程、自动生成文档、支持类型注解等。 |
适用场景
-
Flask:
- 适用于小型到中型项目,以及对框架灵活性有要求的开发者。
- 快速开发原型或小型Web应用时,Flask是一个很好的选择。
-
Django:
- 适用于构建大型和复杂的Web应用程序,如内容管理系统(CMS)等。
- 需要内置认证系统、管理界面和复杂数据模型的应用,Django是理想的选择。
-
FastAPI:
- 适用于构建高性能的API和实时应用程序,特别是需要处理大量并发请求和低延迟的项目。
- 如实时数据处理、游戏服务器等场景,FastAPI表现出色。
学习曲线
-
Flask:
- 学习曲线相对平缓,新手可以快速上手进行Web开发。
- 由于其简洁性,Flask的API设计直观易懂,适合初学者。
-
Django:
- 学习曲线相对陡峭,因其丰富的功能集需要一定的学习和熟悉过程。
- 一旦掌握,Django能高效开发复杂的应用。
-
FastAPI:
- 对于没有异步编程经验的开发者来说,学习曲线可能较陡峭。
- 但其详细的文档和社区支持使得学习变得相对容易。
总结
Flask、Django和FastAPI各有其独特的设计哲学、功能特点和适用场景。选择哪个框架取决于项目的具体需求、开发者的技术背景和喜好。Flask适合快速开发和原型设计;Django适合构建复杂的Web应用程序;而FastAPI则适合构建高性能和实时应用程序。无论选择哪个框架,都需要综合考虑项目规模、开发效率、性能和可维护性等因素。
Flask 的特点
-
轻量级:Flask 的核心非常简单,只包含 Web 开发的基本部分,如请求、响应和会话管理。这使得 Flask 易于学习,同时也易于扩展。
-
灵活性:Flask 提供了足够的灵活性,允许开发者选择并使用各种库和工具来扩展其功能。例如,开发者可以选择不同的模板引擎(如 Jinja2)、数据库 ORM(如 SQLAlchemy)等。
-
WSGI 兼容:Flask 基于 WSGI(Web Server Gateway Interface)标准,这意味着它可以与多种 Web 服务器一起工作,如 Gunicorn、uWSGI 等。
-
RESTful 设计:Flask 鼓励使用 RESTful 设计原则来开发 Web 应用,这有助于创建清晰、易于理解和维护的接口。
-
强大的扩展库:Flask 社区提供了大量的扩展库(称为 Flask-Extensions),这些扩展库提供了各种功能,如用户认证、数据库集成、表单处理等,极大地丰富了 Flask 的功能。
-
易于测试:Flask 应用易于测试,可以使用各种 Python 测试框架(如 unittest、pytest)来编写测试用例。
Flask 常用扩展包
Flask作为一个轻量级的Web应用框架,其核心功能相对简洁,但通过扩展包(Extensions)可以极大地丰富其功能。以下是一些常用的Flask扩展包及其简要说明:
-
Flask-SQLAlchemy:
- 功能:ORM(对象关系映射)工具,用于操作数据库。它允许开发者以面向对象的方式操作数据库,而无需编写大量的SQL语句。
- 重要性:对于需要数据库支持的Web应用来说,Flask-SQLAlchemy是必不可少的。
-
Flask-Migrate:
- 功能:管理数据库迁移的工具。它可以帮助开发者跟踪数据库模式的变化,并允许在不同的开发、测试和生产环境中同步数据库模式。
- 重要性:在数据库结构需要更新时,Flask-Migrate能够确保数据的一致性和完整性。
-
Flask-Session:
- 功能:提供Session存储方式的定制。Flask默认将Session存储在客户端的cookie中,但Flask-Session允许开发者将Session存储在服务器端的数据库或其他存储系统中。
- 重要性:对于需要更安全的Session存储方式或需要处理大量Session数据的Web应用来说,Flask-Session是一个有用的扩展。
-
Flask-WTF(Flask-WTForms):
- 功能:表单处理工具。它简化了表单的创建和验证过程,使得在Web应用中处理用户输入变得更加容易和安全。
- 重要性:几乎所有Web应用都需要处理用户输入,因此Flask-WTF是开发Flask应用时常用的扩展之一。
-
Flask-Mail:
- 功能:发送电子邮件的扩展。它允许开发者在Flask应用中发送电子邮件,支持多种邮件服务器和身份验证方式。
- 重要性:对于需要发送电子邮件通知、验证码或用户注册确认等功能的Web应用来说,Flask-Mail是不可或缺的。
-
Flask-Login:
- 功能:用户认证工具。它提供了用户会话管理、用户登录和登出等功能,使得在Flask应用中实现用户认证变得简单快捷。
- 重要性:在需要用户认证的Web应用中,Flask-Login是开发者的首选扩展之一。
-
Flask-RESTful:
- 功能:开发RESTful API的工具。它提供了一套构建RESTful API的类和方法,使得在Flask应用中快速构建RESTful API成为可能。
- 重要性:随着RESTful API的普及,Flask-RESTful成为了开发RESTful API的Flask应用的常用扩展。
-
Flask-Bootstrap:
- 功能:集成前端Twitter Bootstrap框架的扩展。它使得在Flask应用中快速构建响应式布局和样式变得简单。
- 重要性:对于需要快速构建美观且响应式的前端页面的Web应用来说,Flask-Bootstrap是一个很好的选择。
-
Flask-Moment:
- 功能:本地化日期和时间的扩展。它允许开发者在Flask应用的模板中轻松显示本地化的日期和时间。
- 重要性:对于需要处理多语言或多地区用户的Web应用来说,Flask-Moment能够提升用户体验。
-
Flask-Admin:
- 功能:提供简单而可扩展的管理接口的框架。它允许开发者快速构建一个用于管理数据库记录的后端界面。
- 重要性:在需要为后端数据库提供管理界面的Flask应用中,Flask-Admin可以节省大量的开发时间。
此外,还有其他一些常用的Flask扩展包,如Flask-Caching(缓存)、Flask-OpenID(认证)、Flask-Babel(国际化和本地化支持)等,它们各自在不同的应用场景中发挥着重要作用。
请注意,随着Flask和其扩展包的不断发展,上述信息可能会发生变化。因此,建议在使用时查阅最新的官方文档或相关资源以获取最准确的信息。
Flask 的基本组件
- 路由(Routing):Flask 通过装饰器
@app.route()将 URL 映射到视图函数上,实现 URL 的路由功能。 - 视图函数(View Functions):视图函数是处理请求并返回响应的函数。它们通常执行一些操作(如计算、数据库查询等),并返回 HTML 页面、JSON 数据等。
- 模板(Templates):Flask 使用模板引擎来渲染 HTML 页面。默认情况下,Flask 使用 Jinja2 模板引擎。
- 请求和响应对象(Request and Response Objects):Flask 提供了请求和响应对象,分别表示客户端发送的请求和服务器发送给客户端的响应。
- 配置(Configuration):Flask 允许开发者通过配置文件或环境变量来配置应用。
Flask 的应用场景
- 小型 Web 应用:由于其轻量级和简单性,Flask 特别适合用于开发小型 Web 应用。
- Web 服务的原型制作:在开发大型 Web 应用之前,可以使用 Flask 快速构建原型以验证想法。
- API 开发:Flask 的 RESTful 设计原则使其非常适合用于开发 RESTful API。
- 微服务和云原生应用:Flask 可以与其他微服务框架和工具一起使用,构建云原生应用。
总之,Flask 是一个功能强大且灵活的 Web 应用框架,适用于从小型项目到大型应用的各种场景。
官方文档
Flask的官方文档是学习和使用Flask的首选资源。官方文档通常包含最新的信息、详细的教程和API参考,可以帮助开发者快速上手并深入了解Flask。
官方文档链接
英文官方文档:https://flask.palletsprojects.com/en/latest/
虽然您特别询问了中文文档,但值得注意的是,Flask的官方文档主要以英文形式提供。不过,您可以通过搜索引擎查找是否有社区翻译或第三方提供的中文文档版本。
文档内容概述
Flask官方文档通常包含以下几个部分:
- 入门指南:介绍Flask的基本概念、安装步骤、快速上手教程等,帮助新手快速搭建第一个Flask应用。
- 用户指南:详细解释Flask的各个组件和特性,如路由、模板渲染、请求和响应处理、会话和闪现消息等。
- API参考:提供Flask框架中所有函数、类、方法和属性的详细文档,包括它们的参数、返回值、异常处理等。
- 高级主题:涵盖一些高级功能和最佳实践,如应用工厂模式、蓝图、扩展开发、测试、部署等。
- 迁移和升级指南:为新版本提供迁移指南,帮助开发者将旧代码迁移到新版本,并了解新版本中的变化和改进。
学习建议
- 阅读官方文档:首先,建议从官方文档开始学习,因为官方文档通常是最准确、最全面的资源。
- 实践项目:通过实践项目来巩固所学知识,尝试自己搭建一些简单的Web应用,并逐步增加复杂度。
- 参考教程和书籍:除了官方文档外,还可以参考一些优秀的Flask教程和书籍,这些资源通常包含丰富的示例和解释,有助于更好地理解Flask。
- 加入社区:加入Flask社区,如GitHub、Stack Overflow、Reddit等,与其他开发者交流经验,解决问题。
总之,Flask文档是学习Flask的重要资源,通过仔细阅读文档、实践项目和参考其他资源,您可以逐步掌握Flask并开发出优秀的Web应用。
相关文章:
Flask 介绍
Flask 介绍 为什么要学 Flask框架对比设计哲学功能特点适用场景学习曲线总结 Flask 的特点Flask 常用扩展包Flask 的基本组件Flask 的应用场景官方文档官方文档链接文档内容概述学习建议 Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它旨在让 Web 开发变得快速、简单且…...
JAVA基础知识点3 (String 和 StringBuffer 以及 StringBuilder 的特点以及区别)
1,String 和 StringBuffer 以及 StringBuilder 的特点 (1)String的特点:String是final修饰的字符序列是不可改变的, 是字符串常量,一旦初始化就不可以被更改,因此是线程安全的 因为是常量每次对其操作都会…...
2024年8月AI内容生成技术的现状与未来:从文生文到跨模态交互的全景分析
2024年8月AI内容生成技术的现状与未来:从文生文到跨模态交互的全景分析 大家好,我是猫头虎!🚀 随着AI在内容生成领域的爆发式发展,从2022年末开始,AI生成技术已经走过了文生文(AIGC)…...
File 34
package File;import java.awt.*; import java.io.File;public class file1 {public static void main(String[] args) {//创建FILE对象,指代某个具体的文件//路径分隔符File f1new File("C:/Users/SUI/Desktop/kaishi/nih.txt");// File f1new File(&quo…...
AI全知道-Embedding model中的Vector知识点
在嵌入模型(Embedding Model)中,向量(Vector)是核心概念之一。向量表示法不仅是数学中的基本工具,也是机器学习和深度学习中处理高维数据的关键手段。本文将深入探讨向量在嵌入模型中的作用、表示方法、计算和应用等知识点。 一、向量的基本概念 向量是一个具有方向和大…...
Qt 学习第四天:信号和槽机制(核心特征)
信号和槽的简介 信号和插槽用于对象之间的通信。信号和插槽机制是Qt的核心特征,可能是不同的部分大部分来自其他框架提供的特性。信号和槽是由Qt的元对象系统实现的。介绍(来自Qt帮助文档Signals & Slots) 在GUI编程中,当我们…...
跳跃游戏Ⅱ C++简单代码
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...
Gitlab中access token 和Deploy token的区别
在GitLab中,Access Token和Deploy Token是两种不同类型的令牌,用于不同的目的。以下是它们的主要区别: ### Access Token 1. **用途**: - 用于用户身份验证,允许用户以编程方式访问GitLab API。 - 可以用于克隆…...
【多线程】线程的五种创建方法
文章目录 线程在 Java 代码中编写多线程程序Thread 标准库 创建线程的写法1 . 继承 Thread 类代码回调函数休眠操作:sleep()抢占式执行观察线程jconsoleIDEA 内置调试器 2 . 实现 Runnable 接口代码 3. 匿名内部类创建 Thread ⼦类对象代码匿名内部类 4.匿名内部类创…...
关闭窗口工具类 - C#小函数类推荐
此文记录的是一个关于关闭窗口工具类。 /***关闭窗口工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00使用方法:CloseWindowUtil.CloseWindow(this.Handle);***/n…...
Xilinx FPGA 原语解析(一):IBUFDS_GTE3 差分时钟输入缓冲器
目录 1.使用说明 2.实例化代码 3.参数解释 4.端口连接 1.使用说明 IBUFDS_GTE3 是Xilinx FPGA 中用于高速接口的差分时钟信号输入缓冲器。 BUFDS_GTEx,x2/3/4(不同系列的FPGA x的值不同),其中UltraScale使IBUFDS_GTE3…...
力扣SQL50 患某种疾病的患者 正则表达式
Problem: 1527. 患某种疾病的患者 在SQL查询中,REGEXP 是用于执行正则表达式匹配的操作符。正则表达式允许使用特殊字符和模式来匹配字符串中的特定文本。具体到你的查询,^DIAB1|\\sDIAB1 是一个正则表达式,它使用了一些特殊的通配符和符号。…...
k8s集群的资源发布方式(滚动/蓝绿/灰度发布)及声明式管理方法
目录 1.常见的发布方式 2.滚动发布 3.蓝绿发布 4.实现金丝雀发布(Canary Release) 5.声明式管理方法 1.常见的发布方式 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚优点:用户无感知,部署和回滚速度较…...
SwiftUI 中掌握 ScrollView 的使用:滚动可见性
文章目录 前言视图修饰符应用场景可见性完整示例ContentViewVideoPlayerViewScrollViewVisibilityApp 总结 前言 我们的滚动 API 中又有一个重要的新增功能:滚动可见性。现在,你可以获取可见标识符列表,或者快速检查并监控 ScrollView 内视图…...
中药养发护发
按照中医理论,头发和肝肾有密切联系,肝主血,肾藏精, 其华在发,肝肾强健,上荣于头,则毛发乌黑浓密. 中药育发的应用 以当归,天麻,桑疹子养血润发,配合干姜祛风活血,能通畅经络, 加快循环,激活毛囊,能促进皮肤组织营养成分吸收和废弃物的排泄,改善 头发生态. 用苦参 皂角 清热化…...
Java面试题-集合类
目录 1、请简单介绍下 Java 的集合类吧。 Collection Set TreeSet和HashSet List ArrayList 和 LinkedList 数组和链表的区别 Java 的列表有哪些实现类? Vector Queue Map 能说下 HashMap 的实现原理吗? 能说下 HashMap 的扩容机制吗&#x…...
【Vue3】组件通信之v-model
【Vue3】组件通信之v-model 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的…...
【Golang 面试 - 进阶题】每日 3 题(二)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Java中等题-多数元素2(力扣)【摩尔投票升级版】
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1: 输入:nums [3,2,3] 输出:[3] 示例 2: 输入:nums [1] 输出:[1]示例 3: 输入:num…...
100条超牛的DOS命令
目录 1. 文件和目录管理 1.1 列出文件和目录 1.1.1 dir 1.1.2 dir /w 1.2 切换目录 1.2.1 cd 1.2.2 cd .. 1.3 创建和删除目录 1.3.1 md / mkdir 1.3.2 rd / rmdir 1.4 文件操作 1.4.1 del / erase 1.4.2 copy 1.5 文件重命名 1.5.1 ren / rename 1.5.2 move …...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
