Java EE规范
1、简介
Java EE的全称是Java Platform, Enterprise Edition。早期Java EE也被称为J2EE,即Java 2 Platform Enterprise Edition的缩写。从J2EE1.5以后,就改名成为Java EE。一般来说,企业级应用具备这些特征:1、数据量特别大;2、用户特别多;3、性能要求高;4、安全性要求高;5、生命周期长。企业级应用就要考虑数据存储和查询的问题、系统訪问快慢即性能问题、怎样使用事务保证安全的问题、怎样使系统可扩展易维护的问题。这就要用到分布式,涉及远程方法调用,服务通信,事务和服务等技术,对应于Java EE里的EJB、RMI、JNDI、JTA等。Java EE提供了一个框架、一套标准接口,用于开发分布式结构的应用,但它并没有提供实现。接口的意义在于让不同的厂商由于遵循共同的接口而全然解除依赖关系。Java EE提供接口之后,第三方厂商或专注于整个Java EE架构中的特定组件,如Apache的Tomcat实现了JSP和Servlet;或对J2EE规范提供了一个较为完整的实现,如JBoss和BEA公司的WebLogic。
2、Java EE架构
Java EE的官方规范对Java EE的描述如下:
J2EE平台由一整套服务(services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的主要技术规范进行简单的描述:
-
- 配置文件(profiles),Java EE 平台针对特定类别应用程序的配置,所有 Java EE 配置文件都有一套共同的功能,如命名和资源注入、打包规则、安全要求等。
-
- 应用组件(Application Components),Java EE 运行时环境定义了四种应用程序组件类型:
(1)应用程序客户端(Application clients)是 Java 编程语言程序,通常是在桌面计算机上执行的图形用户界面程序。
(2)小应用程序(Applets)是图形用户界面组件,通常在网络浏览器中执行,但也可在支持小应用程序编程模型的各种其他应用程序或设备中执行。小应用程序可用于为 Java EE 应用程序提供强大的用户界面。
(3)网络容器(Web container):小服务程序(Servlets)、JSP 页面(Java Server Pages)、JSF 应用程序(JavaServer Faces technology)、过滤器和网络事件监听器通常在网络容器中执行,并可响应网络客户端的 HTTP 请求。Servlets、JSP 页面、JSF 应用程序和过滤器可用于生成作为应用程序用户界面的 HTML 页面。它们还可用于生成 XML 或其他格式的数据,供其他应用程序组件使用。Servlet、JSP 页面或 JSF 应用程序、网络过滤器和网络事件监听器统称为 “网络组件”。网络应用程序由网络组件和 HTML 页面等其他数据组成,网络组件在网络容器中执行。
Servlet是一种小型的Java程序,它扩展了Web服务器的功能;同时,作为服务器端的Java程序,用于处理HTTP请求和生成动态内容。作为一种服务器端的应用,Servlet和CGI脚本类似,当被请求时开始执行,可以生成动态的页面,在客户端Session中保存客户的数据。Servlet标准定义了动态生成HTML、XML或其他格式文档的Web网页的技术标准。Serlvet八大内置对象如下:
- 应用组件(Application Components),Java EE 运行时环境定义了四种应用程序组件类型:
对象 | 类型 | 描述 |
---|---|---|
request | HttpServletRequest | 与Servlets相同 |
response | HttpServletResponse | 与Servlets相同 |
session | HttpSession | 用于跟踪用户状态 |
config | ServletConfig | JSP初始配置 |
out | JspWriter | 用于从scriptlets输出动态内容 |
pageContext | PageContext | 访问一些页面属性 |
application | ServletContext | 与Servlet容器通信 |
page | HttpJspPage | 表示从JSP产生的Servlet实例 |
JSP页面由HTML代码和嵌入其中的Java代码所组成,其允许在HTML页面中嵌入Java代码,便于生成动态内容。服务器在页面被客户端所请求后对页面中的Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。JSP通常在大量的HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
(4)EJB(Enterprise Java Beans) 组件在支持事务的托管环境中运行。EJB通常包含 Java EE 应用程序的业务逻辑,即企业业务逻辑。EJB可使用 SOAP/HTTP 协议直接提供网络服务。EJB提供了一个开发和实施分布式商务逻辑的框架,大大地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件如何与EJB容器(container)进行交互。容器负责提供公用服务,如目录服务、事务管理、安全性、资源缓冲池以及容错性等。但EJB并不是实现J2EE的唯一途径。从企业应用多层结构的角度来看,EJB是业务逻辑层的中间件技术。与JavaBeans的关键不同是它提供了事务处理的能力,业务逻辑代码即解决、达到特定业务领域的需求,如银行、零售、金融等,又称EJB处理的业务逻辑层。EJB又分为如下几种Bean:
名称 | 作用 |
---|---|
Session Beans | Session Beans分为Stateless Session Beans,用于表示应用程序的业务逻辑不存储客户端特定的状态;以及Stateful Session Beans,用于表示应用程序的业务逻辑可以存储客户端特定的状态。Session Beans是对业务逻辑的封装,类似于Service层。它可以以local,remote,webservice 服务的方式被client调用 |
Entity Beans | 用于表示应用程序的数据模型,通常与数据库表的行对应;也可用于持久性存储和检索数据 |
Message Driven Beans | 用于异步处理消息的组件,通常与消息队列集成,处理来自其他组件的消息 |
-
- 容器(Containers),为 Java EE 应用程序组件提供运行时支持。Java EE 应用程序组件从不与其他 Java EE 应用程序组件直接交互。它们使用容器的协议和方法进行交互并与平台服务交互。在应用组件和 Java EE 服务之间插入容器可让容器透明地注入组件所需的服务,如声明式事务管理、安全检查、资源池和状态管理。
(1)容器需要满足Java SE(Java Platform, Standard Edition)所述要求。
(2)Java EE 产品提供商通常使用现有的事务处理基础架构并结合 Java SE来实现 Java EE 服务器端功能。
Java EE中,容器的具体实现有这几种:Application Client容器、Applet Client容器、Web容器、EJB容器。Tomcat实际上是Web容器,包括JSP容器和Servlet容器。JBoss和WebLogic是Web容器和EJB容器。
- 容器(Containers),为 Java EE 应用程序组件提供运行时支持。Java EE 应用程序组件从不与其他 Java EE 应用程序组件直接交互。它们使用容器的协议和方法进行交互并与平台服务交互。在应用组件和 Java EE 服务之间插入容器可让容器透明地注入组件所需的服务,如声明式事务管理、安全检查、资源池和状态管理。
-
- 资源适配器(Resource Adapters),通常用于实现与外部资源管理器的网络连接。资源适配器可通过实施 Java EE 标准服务 API(如 JDBC驱动程序)或通过定义资源适配器来扩展 Java EE 平台的功能。资源适配器还可以提供完全本地化的服务,如本地资源交互。资源适配器通过 Java EE SPI(Java EE service provider interfaces)与 Java EE 平台接口交互。
-
- 数据库(Database),Java EE 平台需要一个可通过 JDBC(Java Database Connectivity) API 访问的数据库来存储业务数据。
-
- Java EE标准服务(Java EE Standard Services),Java EE标准服务由以下几部分组成:
(1)HTTP,HTTP 客户端 API 由 java.net 软件包定义。HTTP 服务器端 API 由 servlet、JSP 和 JSF 接口以及作为 Java EE 平台一部分的网络服务支持定义。
(2)HTTPS,在 SSL 协议上使用 的HTTP 协议。
(3)Java 事务 API(Java Transaction API,JTA)。包括:应用级分界接口,由容器和应用组件用来划分事务边界;事务管理器和资源管理器之间的接口,用于 Java EE SPI 层。
(4)RMI-IIOP。RMI(Remote Method Invocation,远程方法调用)是Java的分布式对象标准,允许位于不同主机上的Java类之间进行通信。Java RMI是个应用程序编程接口(API),还是个分布对象模型;使用RMI,Java程序员可以像调用本地操作一样进行网络调用,从而很容易地构造分布式系统。IIOP协议本来是CORBA的一种传输协议,和RMI结合在一起,使得整合非Java对象变得更加简单。
(5)Java IDL,在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并在CORBAORB中部署,或者创建 Java类作为和其他ORB一起部署的CORBA对象的客户。后者可用于遗留系统的集成。
(6)JDBC API,用于连接关系型数据库系统的 API。JDBC API为访问不同的数据库提供了一种统一的途径,像ODBC(Open Database Connectivity,开放数据库连接)一样,JDBC对开发者屏蔽了一些细节问题。另外,JDBC对数据库的访问也具有平台无关性。
(7)Java Persistence API, Java持久性API是管理持久性和对象/关系映射的标准 API。
(8)JMS(Java Message Service),用于和面向消息的中间件相互通信的API,支持可靠的点对点消息传递以及发布-订阅模式。
(9)JNDI(Java Naming and Directory Interface),命名和目录访问的标准 API。JNDI API 包括两个部分:应用组件访问命名和目录服务时使用的应用级接口;附加命名和目录服务提供商的服务提供商接口。JNDI API用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源,如DNS和LDAP、本地文件系统、应用服务器中的对象。
(10)JavaMail,JavaMail API 包括两个部分:应用程序组件用于发送邮件的应用程序级接口,以及 Java EE SPI 级的服务提供商接口。
(11)JAF(JavaBeans Activation Framework),JavaBeans激活框架。
(12)XML Processing,为解析 XML 文档的行业标准 SAX 和 DOM API 提供支持,并为 XSLT 转换引擎提供支持。XML用来在不同的商务过程中共享数据。
(13)Java EE Connector Architecture,允许支持访问企业信息系统的资源适配器插入任何 Java EE SPI。
(14)Security Services,Java Authentication and Authorization Service (JAAS) 使服务能够对用户进行身份验证和实施访问控制。
(15)Web Services,为网络服务客户端和网络服务端点提供全面支持。
(16)Concurrency Utilities,为 Java EE 应用程序组件提供异步功能:托管执行器服务、托管计划执行器服务、托管线程工厂和上下文服务。
(17)Batch,为批处理应用程序提供了一个编程模型,并为调度和执行作业提供了一个运行时。
(18)Management,定义了使用特殊管理企业 bean 管理 Java EE 服务器的 API。
(19)Deployment,定义了部署工具与 Java EE 产品之间的规范。
- Java EE标准服务(Java EE Standard Services),Java EE标准服务由以下几部分组成:
-
- 互操作性(Interoperability),上述许多应用程序接口提供了与不属于 Java EE 平台的组件(如 CORBA 服务),他们需满足一定的互操作性。
-
- 产品要求灵活性(Flexibility of Product Requirements),典型的低端 Java EE 产品将支持使用流行浏览器中 Java 插件的小程序,支持各自 Java 虚拟机中的应用程序客户端,并提供一个同时支持网络组件和企业 bean 的服务器;高端 Java EE 产品可能会将服务器组件分成多个服务器,每个服务器都可以分布在一系列机器上,并实现负载均衡。
-
- Java EE产品打包(Java EE Product Packaging),
-
- Java EE产品扩展(Java EE Product Extensions)
-
- 平台角色(Platform Roles),典型的 Java Platform 企业版角色由以下组成:
(1)Java EE 产品提供者(Java EE Product Provider),Java EE 产品提供商必须提供应用程序部署和管理工具。部署工具使部署者能够在 Java EE 产品上部署应用程序组件。管理工具允许系统管理员管理 Java EE 产品和部署在 Java EE 产品上的应用程序。
(2)应用组件提供者(Application Component Provider),例如,HTML 文档设计师、文档程序员和企业 bean
开发人员。
(3)应用程序组装器(Application Assembler)
(4)部署者(Deployer)
(5)系统管理员(System Administrator)
(6)工具提供者(Tool Provider)
(7)系统组件提供者(System Component Provider)
- 平台角色(Platform Roles),典型的 Java Platform 企业版角色由以下组成:
-
- 平台规范(Platform Contracts)
(1)Java EE APIs
(2)服务提供接口(Java EE Service Provider Interfaces, SPIs)
(3)网络协议(Network Protocols)
(4)部署描述符和注解(Deployment Descriptors and Annotations)
- 平台规范(Platform Contracts)
最后,Java EE的简洁描述可以用下面这张图来表示:
相关文章:

Java EE规范
1、简介 Java EE的全称是Java Platform, Enterprise Edition。早期Java EE也被称为J2EE,即Java 2 Platform Enterprise Edition的缩写。从J2EE1.5以后,就改名成为Java EE。一般来说,企业级应用具备这些特征:1、数据量特别大&…...

Ollama及其Open-WebUI部署更新
目录 1 安装ollama 2 安装Open-WebUI 2.1 不使用容器安装open-webui 2.2 使用Docker安装open-webui 2.3 基于docker升级open-webui 1 安装ollama curl -fsSL https://ollama.com/install.sh | sh启动、关闭ollama systemctl start ollama systemctl stop ollama sys…...

手写 | 设计模式
这里写目录标题 观察者 vs 发布订阅 观察者 vs 发布订阅 参考代码 观察者模式,一对多,两个角色:观察者observer和被观察者/主题Subject。 Subject维护一个数组,记录有哪些Observer;通过调自身的noticefy方法…...

基于深度学习的地形分类与变化检测
基于深度学习的地形分类与变化检测是遥感领域的一个关键应用,利用深度学习技术从卫星、无人机等地球观测平台获取的遥感数据中自动分析地表特征,并识别地形的变化。这一技术被广泛应用于城市规划、环境监测、灾害预警、土地利用变化分析等领域。 1. 地形…...

进程、线程、协程
文章目录 前言一、易混概念1.1 同步vs异步1.2 并发vs并行 二、进程(Process)2.1进程概念2.2 进程三个基本状态2.3多进程方式编程 三、线程(Thread)3.1 线程的引入3.2 线程概念3.3 多线程编程3.4 GIL对多线程的影响3.5 GIL是否意味…...

嵌入式工程师成长之路(1)——元件基础(完整版)
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、认识元件①、认识元件②、认识封装二、电阻1.上拉电阻与下拉电阻①、定义②、应用③、阻值选择④、因上下拉电…...

在Ubuntu 20.04 上安装 CoppeliaSim
在 Ubuntu 20.04 上安装 CoppeliaSim Edu V4.6.0 rev18 的步骤如下: 1. 下载安装文件: 首先,确保您已经下载了 CoppeliaSim_Edu_V4_6_0_rev18_Ubuntu20_04.tar.xz 文件。您可以从 Coppelia Robotics 的官方网站下载。 2. 解压缩文件: 打开终端&#…...

pulseaudio的相关操作(二)
这篇文章主要介绍pulseaudio playback的相关API,pulseaudio playback的具体实例可以参考[2]。如果用pulseaudio实现playback,简单地说就是创建一个playback stream,然后指定这个stream的sink,再定期的向这个stream中写数据。 mai…...

Selenium自动化测试工具
一 .Selenium简介 是一个用于Web应用程序测试的工具 Selenium的核心功能之一是测试软件在不同浏览器和操作系统上的兼容性,确保软件功能与用户需求的一致性,提升用户体验。 自动化脚本生成与执行 Selenium支持自动录制用户操作并生成多种编程语言的测…...

优化UVM环境(九)-将interface文件放在env pkg外面
书接上回: 优化UVM环境(八)-整理project_common_pkg文件 My_env_pkg.sv里不能包含interface,需要将my_intf.sv文件放在pkg之外...

mysql 主从安装
登录看第二篇 WINDOWS系统搭建MYSQL 8.0主从模式_windows mysql8.0.34主从配置-CSDN博客 Windows下MySQL8.0最新版本超详细安装教程_windowsserver安装mysql8.0-CSDN博客 启动两个服务 可执行文件路径一致问题解决: windows,同一台机器安装两个mysq…...

【C++刷题】力扣-#121-买卖股票的最佳时机
题目描述 给定一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。假设你可以在第 i 天买入并在第 j 天卖出股票(i ≤ j),设计一个算法来计算你所能获取的最大利润。注意你只能持有一股股票,并且你不能同时参与多…...

Python量化交易(二):金融市场的基础概念
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的Python量化交易学习总结文档;在现代社会中,投资已成为个人、机构和政府追求财富增长和资源配置的重要方式。…...

Java方法的递归调用
Java中的方法可以通过调用自身来实现递归调用。 递归调用在解决一些问题时非常有用,特别是那些可以分解为相同结构的子问题的情况。递归调用可以让问题的解决过程更加简洁和优雅。 下面是一个简单的示例,展示了如何使用递归调用来计算一个数字的阶乘&a…...

JavaScript 第30章:综合项目
看起来您想要了解如何在一个JavaScript为主的项目中进行项目规划、技术选型、开发流程以及维护等方面的内容,并且希望结合Java的源代码来进行详细的讲解。不过,JavaScript和Java是两种不同的编程语言,通常它们的应用场景也不同。JavaScript 主…...

GB/T28181-2022规范解读、应用场景和技术实现探究
GB/T28181-2022和GB/T28181-2016区别 GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别: 术语和定义方面: 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数…...

Docker容器间链路管理
Docker容器是一个轻量级的、可移植的软件打包技术,它允许开发者将应用程序及其依赖项打包到一个独立的容器中,然后发布到任何支持Docker的环境中运行。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。 可以将…...

python画图|在三维空间的不同平面上分别绘制不同类型二维图
【1】引言 前序已经完成了基础的二维图和三维图绘制教程探索,可直达的链接包括但不限于: python画图|3D参数化图形输出-CSDN博客 python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 在学习过程中,发现一个案例࿱…...

与ai一起作诗(《校园清廉韵》)
与ai对话犹如拷问自己的灵魂,与其说ai助力还不如说在和自己对话。 (笔记模板由python脚本于2024年10月19日 19:18:33创建,本篇笔记适合喜欢python和诗歌的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&…...

python matplotlib
一、图形函数 函数名称描述Bar绘制条形图Barh绘制水平条形图Boxplot绘制箱型图Hist绘制直方图his2d绘制2D直方图Pie绘制饼状图Plot在坐标轴上画线或者标记Polar绘制极坐标图Scatter绘制x与y的散点图Stackplot绘制堆叠图Stem用来绘制二维离散数据绘制(又称为火柴图&…...

秋招面试题记录_半结构化面试
c八股(可能问的多一点) 1.简单说说C11语法特性 答: 1.auto以及decltype自动类型推导,避免手动声明复杂类型,减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…...

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

Android 12.0进程保活白名单功能实现
在Android 12.0系统中,实现进程保活白名单功能是为了确保某些重要的应用程序即使进入后台也能长时间保持运行状态,不被系统自动杀死。这一功能的实现涉及多个核心类和文件,以下是具体的实现步骤和核心功能分析: 一、实现步骤 …...

vscode 功能、设置备忘
2024年10月18日 crtl p 按文件名搜索,输入> 开始搜索命令 设置文件显示过滤和搜索过滤: ctrlp 输入 >settings 选择Preferences:Open Settings(UI),搜索exclude 配置 Files Exclude 修改显示过滤 配置 Search Exclude 修…...

错误 Failed to connect to xx.xx.xx.xx port xx: No route to host
Failed to connect to xx.xx.xx.xx port xx: No route to host 系统环境: Oracle Cloud(OCI)Ubuntu20.4 问题: 连接本机IP正常访问,连接内网ip可正常访问,但连接外网IP报错:Failed to conne…...

Redis环境的搭建
Redis环境的搭建可以分为Linux系统和Windows系统两种情况。 一、Linux系统下Redis的搭建 1. 安装前准备 确保Linux系统已安装GCC环境,可以使用yum install gcc-c命令安装。下载Redis安装包,例如redis-6.2.6.tar.gz,并将其上传到Linux服务器…...

Git Push(TODO)
最近经常碰到GIT push不上去的问题。到处求人解决也真是尴尬,想自己看看,所以刚刚在github上建了一个仓,试了下。结果如下: 暂时可能还不行,因为数据都是加密的,没法看到具体GIT的交互信息。。。 后面再想办…...

Java工具类--截至2024常用http工具类分享
1. Apache HttpClient Apache HttpClient是一个功能强大的、灵活的HTTP客户端,用于发送请求和接收响应。它支持HTTP/1.1和HTTP/2协议,并且提供了丰富的配置选项。适用于需要高度可配置性和扩展性的场景。 2.OkHttp OkHttp是一个高效的HTTP客户端&…...

C#学习笔记(五)
C#学习笔记(五) 第 三 章 基本语句以及语法一、控制台的基本语句使用1. 方法重载2. 输入输出3.字符串格式化 二、赋值运算符、算数运算符、比较运算符三、数据类型转换常用方法使用、比较和选择1. 自动类型转换(隐式转换)2. 强制类型转换2.1 数值类型之间…...

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?
视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性,支持多种视频流的外部分发,如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等,这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…...