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

如何解决需要帮助来定义/理解Java EE“堆栈”

|| LAMP是从左到右(从下到上)定义为Linux / Apache / MysqL / PHP的堆栈,或者通常可以将其视为操作系统/ Web服务器/数据库/脚本语言。以通用形式,您可以在任何操作系统(例如Windows而不是Linux)中弹出以获取WAMP或放入其他数据库,甚至可以运行除PHP以外的其他语言(例如Ruby)。但是,通常您只需要一件事情。一个数据库一个OS,一台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。真的吗?如果有人可以分解下图中的各个部分以及它们如何组合在一起,那将非常有帮助。 我知道这些问题很多。如果我没有问过您认为我应该知道的问题,请随意扔掉它,或者如果我说错了什么,请纠正我!至少可以说,Java EE堆栈以及与之相关的所有部分都令人生畏。在深入研究并开始构建任何东西之前,我只想很好地了解高水平视图。 谢谢!     

解决方法

该图不是Java EE堆栈。 这可能会有所帮助(或无效): 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领域中称为“ Beans”)。 Hibernate是一个ORM,在完整的Java EE(例如EntityBeans)的上下文中是冗余的。通常,JPA与Web-Container \“ Java EE \”系统一起使用,以连接到后端JDBC兼容的RDMBS。 Oracle,MySQL等。 您(和/或某些第三方库)提供这些组件。 托管运行时首先要考虑诸如事务完整性之类的“正交”,“企业”,“问题”,因此组件/应用程序编写者应该专注于“业务逻辑”。 \”。 Java EE管理组件的引用,事务边界,连接性和生命周期。 参考:使用语义参考通过名称空间机制(即JNDI和RMI)在运行时查找。通过声明性部署描述符进行依赖注入。 生命周期:您的组件将具有正确的启动,工作和关闭阶段。您可以参与这些LC事件,并在必要时参加(通常是不必要的)。这种形式化的LC允许架构的分布和扩展。 连接性:广泛解决传入(客户端)和内部(EIS)集成点。对于客户端,您具有Web / RMI / JMS等。这使您可以同步req / rep语义以及异步触发和忘记操作。对于后端(通常),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是基于容器的系统的替代方法。 货柜 从理论上讲,您应该可以将整个容器插入兼容的服务器中,但是通常的想法是您正在为通用容器编写组件,例如Java EE容器。您可以想象,无论如何,Java EE应用服务器的供应商并不热衷于为堆栈提供可插入的容器API,因为它将使他们的产品成为完整的商品。 弹簧 Spring实际上与Java EE相反。它是(或者曾经是)一种轻量级的容器系统,用于解决J2EE的痛点(考虑到复杂的架构和部署仪式,如果没有有效的工具,这是完全不合理的)。实际上,Servlet前端和Spring容器是成熟的Java EE堆栈的替代方案。也就是说,它们可以共存。 马文 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)太烂的原因,它太冗长了,这一层都是关于将部件放置在此处,将部件放置在此处等的无意识重复。 最简单(也是开箱即用)的,您具有基本的HTTPServlet并能够发送回您想要的任何内容。您可以在代码中编写html(一个非常糟糕的主意),或使用模板方法(Velocity,FreeMarker),或使用专门的组件进行演示:JSP,Faces等。实际上有数十种框架(以及方法)。 希望这会有所帮助。     ,是的,您发布的图表令人生畏,但您不必使用所有这些东西。这不是全部必要。 如果您是新手,请保持简单并逐步建立。 这是最底层的必备项目,从以下开始: Servlet和JSP。这意味着在Tomcat / Jetty之类的Servlet / JSP引擎上进行部署。 Servlet是HTTP侦听器,用于处理传入的请求,与后端类协作以实现它们,并将响应路由到适当的下一个视图。 JSP是用于生成HTML的模板解决方案。您只应使用JSTL(JSP标准标记库)编写这些代码。没有脚本。 UI的HTML,CSS和JavaScript。对于基于Web的UI,您需要这些。 JDBC用于关系数据库访问。 而已。有了这些,您可以走很长一段路。 我爱Spring,但是第一次吞下很多东西。做一个或两个没有它的网站。您将更好地理解事物,并欣赏Spring为您所做的更多。 您不需要JSF。我认为这是一种正在下降的技术。我个人看到的一个JSF / Faces应用绝对可靠。您可以使用日d对页面加载进行计时。尽管它被吹捧为Java EE标准,但我认为它并不是一个大赢家。您要在移动UI上运行JSF吗?我不这么认为。 UI是使用HTML,CSS和JavaScript与后端服务对话而编写的。这些服务可以是基于REST的servlet。 Hibernate是一种对象关系映射技术。如果没有对象模型,则不需要Hibernate。如果对象和表之间具有简单的一对一关系,则不需要Hibernate。如果您喜欢将存储过程作为关系数据库的接口,则不需要Hibernate。如果您不介意编写一些SQL并映射结果,则不需要Hibernate。 JPA的同上-Hibernate是实现JPA的一种方法,它从Hibernate中大量获取。 从这些开始并建立起来。如果您尝试学习所有引用的内容,那么您将一无所获。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?