Java技术栈常见术语及其解释(常见缩写)

Terminology 是“术语,专门用语”的意思。Java中有太多的缩写词、技术术语,初学者经常被各个术语搞得晕头转向。下边来汇总一下,希望对大家有所帮助。

Java SE 、Java EE、 Java ME

Java分为: 标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。

(1) Java SE (Java Platform, Standard Edition) 标准版本:

J2SE 包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程

(2) Java EE (Java Platform,Enterprise Edition) 企业版本:

J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。比如:EJB、servlet、JSP、XML、事务控制 在2017年,Oracle 宣布开源 Java EE 并将项目移交给 Eclipse 基金会,改名为 Jakarta EE。

备注: Java 和 Jakarta 均为印度尼西亚的2个地名。

(3) Java ME (Java Platform,Micro Edition) 微型版本:

Java ME 又称为 J2ME(Java Platform,Micro Edition),是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。 J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒

2005年6月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。

JRE 与 JDK

JRE: Java运行环境

JRE 是 Java Runtime Environment 缩写,指Java运行环境,是Sun的产品。运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库

JDK: Java开发工具(包含JRE)

JDK 是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

JSR:

JSR 是Java Specification Requests的缩写,意思是Java 规范提案。 是指向 JCP (Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。 JSR已成为Java界的一个重要标准。

JCP:

JCP (Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。

JAR、 EAR、 WAR 包文件?

(1) JAR:Java Archive

JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。

JAR包,通常是将多个 class 文件压缩成一个文件,可作为一个类库供其他项目引用。

(2) EAR: Enterprise Archive file

EAR 包含内容:Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件,如图片、音频文件等; 除了包含JAR、WAR以外,还包括 EJB 组件·

(3) WAR: Web Application Archive

WAR 与 JAR 类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织,是做好一个web应用后,通常是一个网站,打成包部署到容器中。

Java虚拟机: JVM

JVM 是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java 语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。

Java 语言使用 Java虚拟机 屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机 在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是 Java 的能够“一次编译,到处运行”的原因。

应用服务器: Tomcat VS Apache

Tomcat 服务器是一个免费的开放源代码的 We b 应用服务器,属于轻量级应用服务器,是 Servlet、 JSP、Java WebSocket的开源实现。

Servlet 是指 Java 语言中在服务器上运行的小型应用程序。

JSP 是 JavaServer Pages (服务器页面)。页面一般以 jsp 结尾, 比如 index.jsp 页面.

Apache 服务器是指 Apache 基金会下的 Apache Httpd 服务器。Apache 基金会还有很多其他出门的软件,比如 Tomcat、 Maven、Kafka、Cassandra、Hadoop 等。

Java Servlet 技术

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI (Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。比如 PHP 开发程序,主要就是使用 fast-cgi 来运行的。

Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。 Servlet 是独立于平台的,因为它们是用 Java 编写的。 Servlet 为创建基于 web 的应用程序提供了基于组件、独立于平台的方法,可以不受 CGI 程序的性能限制。 Servlet 有权限访问所有的 Java API,包括访问企业级数据库的 JDBC API。

网页技术 JSP: JavaServer Pages Technology

JSP全称Java Server Pages,和PHP, ASP类似,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP的页面,一般以 jsp 结尾。PHP 开发的语言一般以 .php 结尾, ASP开发的一般以 .asp 结尾。

使用 Nginx 或 Apache Httpd 服务可以使用伪静态,隐藏这些文件后缀名。

Java Expression Language (JEXL)

JEXL implements an Expression Language based on some extensions to the JSTL Expression Language supporting most of the constructs seen in shell-script or ECMAScript.

EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。

JSF: JavaServer Faces

JavaServer Faces (JSF) 是一种用于构建 Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。

典型的JSF应用程序包含下列部分: 一组JSP页面 一组后台 bean(为在一个页面上的UI组件定义的属性和函数的 JavaBean 组件) 应用程序配置资源文件(定义页面导航规则、配置bean和其它的自定对象,如自定义组件) 部署描述文件(web.xml) 一组由应用程序开发者创建的自定义对象(有可能) 一些可能包含自定义组件、约束、转换器或者监听器的对象 为在页面中表现自定义对象的一组自定义tag 包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。

Java Applet

A Java applet was a small application that is written in the Java programming language, or another programming language that compiles to Java bytecode, and delivered to users in the form of Java bytecode.

Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。

JavaBean

JavaBean 是特殊的Java类,使用J ava语言书写,并且遵守JavaBean API规范。

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。

JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。

简单的Java对象: POJO

POJO (Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

  • PO: Persistant Object. 持久对象,数据;

PO 是 Persistant Object 的缩写,用于表示数据库中的一条记录映射成的 java 对象。 PO 仅仅用于表示数据,没有任何数据操作。 通常遵守 Java Bean 的规范,拥有 getter/setter 方法。

  • DTO: Data Transform Object. 传输对象,前端调用时传输 ;

DTO 通常用于不同服务或服务不同分层之间的数据传输。 DTO 与 VO 概念相似,并且通常情况下字段也基本一致。 但 DTO 与 VO 又有一些不同,这个不同主要是设计理念上的,比如 API 服务需要使用的 DTO 就可能与 VO 存在差异。 通常遵守 Java Bean 的规范,拥有 getter/setter 方法。

  • VO: Value Object. 表现对象,前端界面展示。

VO 是 Value Object 的缩写,用于表示一个与前端进行交互的 java 对象。 这里的 VO 只包含前端需要展示的数据即可,对于前端不需要的数据,比如数据创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在 VO 中体现出来。

  • BO: Business Object. 业务对象,封装对象、复杂对象 ,里面可能包含多个类;

BO 包括了业务逻辑,常常封装了对 DAO、RPC 等的调用,可以进行 PO 与 VO/DTO 之间的转换。 BO 通常位于业务层,要区别于直接对外提供服务的服务层: BO 提供了基本业务单元的基本业务操作,在设计上属于被服务层业务流程调用的对象,一个业务流程可能需要调用多个 BO 来完成。

  • DAO 是 Data Access Object 的缩写,用于表示一个数据访问对象。

使用 DAO 访问数据库,包括插入、更新、删除、查询等操作,与 PO 一起使用。 配合 VO, 提供数据库的 CRUD 操作 DAO 一般在持久层,完全封装数据库操作,对外暴露的方法使得上层应用不需要关注数据库相关的任何信息。

DO(Domain Object)领域对象
就是从现实世界中抽象出来的有形或无形的业务实体。一般和数据中的表结构对应。

TO(Transfer Object) ,数据传输对象
在应用程序不同 tie( 关系 ) 之间传输的对象

上面说的 PO、VO、DTO 都是典型的 POJO。而 DAO、BO 一般都不是 POJO,只提供一些调用方法。

EJB: Enterprise JavaBean

EJB 是 Sun 公司的 JavaEE 服务器端组件模型,设计目标与核心应用是部署分布式应用程序。 EJB (Enterprise JavaBean) 是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。

在 J2EE 里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 在 EJB3.0 推出以后,实体Bean被单独分了出来,形成了新的规范JPA。

JPA: Java Persistence API

JPA 是 Java Persistence API 的简称,中文名Java持久层API,是JDK 5.0 注解或 XML 描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA 标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。

Hibernate 是一个 ORM 框架 (对象关系映射框架)。

Java 构建工具

  • Apache Maven

Apache Maven 是一个软件项目管理和综合工具。

Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven 的核心功能便是合理叙述项目间的依赖关系,即根据 pom.xml 文件的配置获取 jar 包,不用手动去添加jar包。

  • Apache Ant

Apache Ant is a Java-based build tool. In theory, it is kind of like make, without make's wrinkles.

  • Gradle (推荐使用)

Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

Maven中 GroupId 和 ArtifactId 都是什么?

GroupId 和 ArtifactId 被统称为“坐标”是为了保证项目唯一性而提出的.

GroupId 一般分为多个段,一般第一段为域,第二段为公司名称。域又分为org、com、cn等,其中org为非营利组织,com为商业组织。

举个 apache 公司的 tomcat 项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。

org.springframework » spring-webmvc

比如 spring-boot 项目:

其 GroupId 是 org.springframework.boot , 分为三段,第一段为 org , 第二段为框架 springframework, 第三段为 boot 其 ArtifactId 指明项目是 spring-boot

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot</artifactId>
    <version>2.6.1.RELEASE</version>
</dependency>

GroupId 是项目组织唯一的标识符, 比如我的项目叫test001 那么GroupID应该是 com.lixiaoming.test001 域名.公司名.项目名

ArtifactId 就是项目的唯一的标识符, 一般是 项目名-xxx 比如test001-model

POM

POM(Project Object Model)作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。

可以理解为 pom.xml 是项目的依赖配置文件。类似于 node 中的 package.json 、 php 中的 composer.json、 golang 中的 go.mod 文件。

Java 数据库连接: JDBC

JDBC (Java DataBase Connectivity, Java数据库连接) 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序.

JDBC API 是一个Java API可以访问任何类型的数据库的数据,尤其是存储在关系数据库中的数据。

  • MySQL Connector/J

MySQL Connector/J 是一个实现 JDBC API的驱动程序, 可以用来操作 MySQL 数据库。

MySQL Connector/J 8.0, a JDBC and X DevAPI driver for communicating with MySQL servers.

X DevAPI: The X DevAPI is implemented by MySQL Shell and MySQL Connectors that support X Protocol.

SSH:

SSH 为 Struts + Spring + Hibernate 的一个集成框架,是之前较流行的一种Web应用程序开源框架。

SSH 同时也是 Secure Shell 的缩写,是建立在应用层基础上的安全协议,客户端在命令行终端可以使用 SSH 连接并操控服务器。

  • Struts框架 (用的少)

Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork 和 Struts1.x 两种 Web 框架。

Struts2 是一个基于MVC设计模式的 Web 应用框架,它本质上相当于一个 Servlet,在MVC设计模式中,Struts2 作为控制器(Controller)来建立模型与视图的数据交互。

  • Spring框架

Spring 框架是一个开源的 Java 平台,它为容易而快速的开发出耐用的 Java 应用程序提供了全面的基础设施。 Spring 框架最初是由 Rod Johnson 编写的,并且 2003 年 6 月首次在 Apache 2.0 许可下发布。

  • Hibernate: Everything data.

Hibernate 是一个开放源代码的对象关系映射(ORM)框架,它对 JDBC 进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的 ORM 框架. Hibernate 可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 框架使用在数据持久化层(DAO)。

  • ORM: Object Relational Mapping

ORM:对象关系映射, 采用映射元数据(配置文件)来描述对象-关系的映射细节。 ORM 框架通过配置文件将实体对象和数据库表对应起来。 采用映射元数据(配置文件)来描述对象-关系的映射细节。 ORM 框架通过配置文件将实体对象和数据库表对应起来。

  • MyBatis

MyBatis 是一款流行的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs 映射成数据库中的记录。

MyBatis 本是 Apache 的一个开源项目 iBatis, 2010年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为 MyBatis 。2013年11月迁移到Github。

Apache Derby 数据库

Apache Derby, 是 Apache DB 下的一个子项目,是全部由 Java 实现的关系型数据库,其内嵌 JDBC 驱动,小巧,易于安装、部署和使用。

由于 Derby 是一个纯Java程序,因此只需要操作系统支援Java虚拟机,Derby便可执行。 由于 SQL 程序转成的 Java bytecode 能被 JIT 动态翻译,因此 Derby 可能比传统的数据库管理系统更佳的性能。

Apache Cassandra 数据库

Cassandra 是一套开源分布式NoSQL数据库系统。

Cassandra, 卡珊德拉(希腊神话人物),它最初由 Facebook 开发,用于储存收件箱等简单格式数据,集 Google BigTable 的数据模型与 Amazon Dynamo 的完全分布式的架构于一身。

Facebook 于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

欢迎留言补充!

-END-