当前位置: 首页 > news >正文

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中的主要技术规范进行简单的描述:

    1. 配置文件(profiles),Java EE 平台针对特定类别应用程序的配置,所有 Java EE 配置文件都有一套共同的功能,如命名和资源注入、打包规则、安全要求等。
    1. 应用组件(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八大内置对象如下:
对象类型描述
requestHttpServletRequest与Servlets相同
responseHttpServletResponse与Servlets相同
sessionHttpSession用于跟踪用户状态
configServletConfigJSP初始配置
outJspWriter用于从scriptlets输出动态内容
pageContextPageContext访问一些页面属性
applicationServletContext与Servlet容器通信
pageHttpJspPage表示从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 BeansSession Beans分为Stateless Session Beans,用于表示应用程序的业务逻辑不存储客户端特定的状态;以及Stateful Session Beans,用于表示应用程序的业务逻辑可以存储客户端特定的状态。Session Beans是对业务逻辑的封装,类似于Service层。它可以以local,remote,webservice 服务的方式被client调用
Entity Beans用于表示应用程序的数据模型,通常与数据库表的行对应;也可用于持久性存储和检索数据
Message Driven Beans用于异步处理消息的组件,通常与消息队列集成,处理来自其他组件的消息
    1. 容器(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容器。JBossWebLogic是Web容器和EJB容器。
    1. 资源适配器(Resource Adapters),通常用于实现与外部资源管理器的网络连接。资源适配器可通过实施 Java EE 标准服务 API(如 JDBC驱动程序)或通过定义资源适配器来扩展 Java EE 平台的功能。资源适配器还可以提供完全本地化的服务,如本地资源交互。资源适配器通过 Java EE SPI(Java EE service provider interfaces)与 Java EE 平台接口交互。
    1. 数据库(Database),Java EE 平台需要一个可通过 JDBC(Java Database Connectivity) API 访问的数据库来存储业务数据。
    1. 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-IIOPRMI(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 产品之间的规范。
    1. 互操作性(Interoperability),上述许多应用程序接口提供了与不属于 Java EE 平台的组件(如 CORBA 服务),他们需满足一定的互操作性。
    1. 产品要求灵活性(Flexibility of Product Requirements),典型的低端 Java EE 产品将支持使用流行浏览器中 Java 插件的小程序,支持各自 Java 虚拟机中的应用程序客户端,并提供一个同时支持网络组件和企业 bean 的服务器;高端 Java EE 产品可能会将服务器组件分成多个服务器,每个服务器都可以分布在一系列机器上,并实现负载均衡。
    1. Java EE产品打包(Java EE Product Packaging),
    1. Java EE产品扩展(Java EE Product Extensions)
    1. 平台角色(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)
    1. 平台规范(Platform Contracts)
      (1)Java EE APIs
      (2)服务提供接口(Java EE Service Provider Interfaces, SPIs)
      (3)网络协议(Network Protocols)
      (4)部署描述符和注解(Deployment Descriptors and Annotations)

最后,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方法&#xf…...

基于深度学习的地形分类与变化检测

基于深度学习的地形分类与变化检测是遥感领域的一个关键应用,利用深度学习技术从卫星、无人机等地球观测平台获取的遥感数据中自动分析地表特征,并识别地形的变化。这一技术被广泛应用于城市规划、环境监测、灾害预警、土地利用变化分析等领域。 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博客 在学习过程中,发现一个案例&#xff1…...

与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用来绘制二维离散数据绘制(又称为火柴图&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...