加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

需要帮助定义/理解Java EE“堆栈”

发布时间:2020-12-15 02:47:55 所属栏目:Java 来源:网络整理
导读:LAMP是一个从左到右(从下到上)定义为 Linux / Apache / MySQL / PHP的堆栈,或者通常可以将其视为操作系统/ Web服务器/数据库/脚本语言.在通用形式中,您可以在任何操作系统中弹出,例如Windows而不是Linux以获取WAMP或放入其他数据库,甚至可以运行除PHP以外的
LAMP是一个从左到右(从下到上)定义为 Linux / Apache / MySQL / PHP的堆栈,或者通常可以将其视为操作系统/ Web服务器/数据库/脚本语言.在通用形式中,您可以在任何操作系统中弹出,例如Windows而不是Linux以获取WAMP或放入其他数据库,甚至可以运行除PHP以外的其他语言,如Ruby.但是,通常你只有一件东西.一个数据库,一个操作系统,一个Web服务器,但您的应用程序可能会从一个堆栈转换到另一个堆栈,并且进行一些有限的更

我已经在LAMP堆栈中进行了几年的开发,我一直在阅读有关JSF以及组件库RichFaces和IceFaces的内容.从支持AJAX的组件构建网站UI的整个想法,并获得各种漂亮的东西,如验证,以及免费的混乱AJAX调用真的很令人兴奋.

问题是我很难理解通用组件构成Java EE堆栈的原因.根据我的研究,您似乎有以下类别来构建“Java EE堆栈”:

Java EE应用服务器 – JBoss,Tomcat

数据库 – MySQL,Oracle

数据库抽象 – Hibernate,JPA

支持JSF Ajax的组件库 – ICEFaces,RICHFaces

我觉得我肯定错过了一些东西.我不确定Seam或Spring适合这个. Hibernate也是使用JPA的东西吗?或者JPA是一个功能齐全的API,我可以轻松使用它?容器在哪里适合这个?我可以出去找一个容器在我的Java EE应用服务器上运行吗?此外,Maven在哪里适合所有这些?从我收集的内容来看,它似乎不是Web服务堆栈的一部分,而是在部署之前使用的工具.

我一直在阅读Rainer Eschen的ICEfaces 1.8,这个图由他作为一种Java EE堆栈呈现.我的猜测是AppFuse是针对Java EE的,因为XAMPP是针对LAMP的.真的吗?如果有人可以分解下图中的各个部分以及它们如何组合在一起,那将非常有用.

ICEcube Architecture Diagram http://img191.imageshack.us/img191/336/icecubearchitecture.png

我知道这些是各种各样的问题.如果我没有问你认为我应该知道的事情,请随意把它丢掉,或者如果我说错了,请纠正我! Java EE堆栈以及与它一起使用的所有部分至少可以说是令人生畏的.在我深入研究并开始构建任何东西之前,我只是希望能够很好地处理高级视图.

谢谢!

解决方法

该图表不是 Java EE stack.

这可能有用(或不:):

> Java EE是托管运行时系统. (LAMP没有这样的顾虑.)
> Java EE使用组件 – 容器通用体系结构(LAMP未定义显式组件容器API)
> JBoss,Glassfish等应用程序服务器提供Java EE容器. (Tomcat不支持完整的Java EE堆栈.Tomcat和Jetty仅提供Web容器(或每个最新规范的Web配置文件.))
>请注意,Java EE Web容器(Servlet)比完整的Java EE堆栈简单得多,但它们基于相同的架构方法.
> Java EE的Web组件(基本上)是Servlet和过滤器.在此体系结构之上构建了各种高阶框架(例如Faces). Java EE Web容器相对简单且非常有效.它是最接近LAMP的东西.
> Java EE的企业组件(由诸如GlassFish的Java EE应用程序服务器支持)是各种类型的无状态,有状态和持久性组件(在Java领域中称为“Bean”).
> Hibernate是一个ORM,在完整Java EE(例如EntityBeans)的上下文中是多余的.通常,JPA与Web容器“Java EE”系统一起使用,以连接到后端JDBC兼容的RDMBS. Oracle,MySQL等等.
>您(和/或某些第三方库)提供组件.
>托管运行时主要关注处理事务完整性等“正交”“企业”“关注点”,组件/应用程序编写者应该关注“业务逻辑”.
> Java EE管理组件的引用,事务边界,连接和生命周期.
>参考文献:使用语义参考通过名称空间机制JNDI和RMI在运行时查找;和通过声明性部署描述符的依赖注入.
>生命周期:您的组件将具有正确的启动,工作和关闭阶段.您可以挂钩这些LC事件并在必要时参与(通常不是必需的).这种形式化的LC允许分布和缩放架构.
>连接:广泛地解决传入(客户端)和内部(EIS)集成点.对于客户端,您有web / RMI / JMS等.这为您提供同步req / rep语义和异步fire and forget.对于后端(通常),JCA指定连接到其他系统的连接器. JPA是JCA的专门化(理论上不是实践),它专门用JDBC用户API来处理数据库EIS.
>事务:声明表示将事务语义应用于组件的特定方法.这可以在设计时(通过注释)或在部署时(通过XML)完成.

部署包

Java EE系统通常打包为WAR(仅适用于Web)或EAR(适用于完整堆栈).

部署描述符

Java EE的最新规范支持使用合理默认值(或普通映射)的零配置操作.但是,重要的是要了解这是什么,在某些时候,任何严肃的Java EE应用程序都需要在某种程度上处理这些工件. (对于web.xml来说要容易得多,所以不要惊慌失措.)这是架构的一个关键方面.理解这一点,其他一切都很清楚.

Java EE使用间接使其神奇发生.这是这里要解决的问题:

我们有一些第三方编写的组件(前一段时间),我们需要在我们的应用程序中使用它们.部署描述符允许映射特定于应用程序的语义,例如:组件的名称或其对组件通用语义的事务语义.例如,您可能希望将“Acme-Logger”公开为“My-Very-Own-Logger”.您可以通过将所需的环境名称映射到组件的类来实现此目的. (原始组件可能有一个注释,声明其通用名称只是“the-logger”).

实际上,Spring是由于创建和维护这些映射描述符的严重痛苦而产生的.同样,Spring是基于容器的系统的替代方法.

集装箱

从理论上讲,您应该能够将整个容器插入兼容的服务器,但一般的想法是您正在为通用容器编写组件,例如: Java EE容器.无论如何,正如您所想象的那样,Java EE应用服务器的供应商并不太热衷于为堆栈提供可插入的容器API,因为它会使他们的产品成为完整的商品.

弹簧

Spring实际上是Java EE的反驳论文.它(或者是)是一个轻量级的容器系统来解决J2EE的难点(如果没有有效的工具,这是完全不合理的,考虑到精心设计的架构和部署仪式).实际上,Servlet前端和Spring容器是完整的Java EE堆栈的替代品.也就是说,它们可以共存.

Maven的

Maven是一个构建工具.还有蚂蚁.或者你可以跳上Gradle.存在Maven原型,允许您轻松地开始使用基本的Java EE项目.

建议:

从(并坚持使用)Web容器子集开始. Jetty或Tomcat是容器/服务器的不错选择.

了解WEB-INF /和web.xml.编写一个简单的HTTPServlet扩展,并使用web.xml的功能.尝试设置过滤器,或将一些参数绑定到Web应用程序上下文中.掌握这些基础知识.其他一切都建立在这些之上.一切.

在servlet中,浏览提供的API.了解应用程序,会话和请求“上下文”之间的区别. Web层中的关键问题.了解如何重定向请求.获取http标头等.其他所有内容都基于这些.掌握这些基础知识.

让我们说你现在有了你的HelloWorld网络应用程序.下一步,尝试JPA并为项目添加持久性.在这里您可以尝试Spring / Hibernate / Tomcat教程示例. Spring将为您的业务组件(类)设置非Java EE容器. Hibernate将负责持久保存您的数据.执行此操作时会引入几个新工件. Spring相关的xml文件和JPA / Hibernate映射.了解这些以及它的全部内容.

你几乎完成.最后,让我们转向视图或演示文稿的问题.这就是Java(imo)很糟糕的地方,因为它太冗长了,而且这个层都是关于put widget的无意义重复,把widget放在那里等等.

在最简单(并且开箱即用)的情况下,您拥有基本的HTTPServlet,并能够发送您想要的任何内容.您可以在代码中编写html(一个非常糟糕的主意),或者使用模板方法(Velocity,FreeMarker),或者使用专门的组件进行演示:JSP,Faces等.实际上有几十个框架(和接近)表示层.

希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读