【发布时间】:2010-12-08 08:33:30
【问题描述】:
.war 和 .ear 文件有什么区别?
【问题讨论】:
-
欢迎来到 Java 世界,有人认为留下 .zip 扩展名的 zip 文件不够企业化,因此必须根据您所在的位置将其重命名为 .jar / .ear 或 .war最终移动它。
标签: java jakarta-ee deployment
.war 和 .ear 文件有什么区别?
【问题讨论】:
标签: java jakarta-ee deployment
在 J2EE 应用程序中,模块根据其功能被打包为 EAR、JAR 和 WAR
罐子: 包含企业 Java bean(类文件)和 EJB 部署描述符的 EJB 模块被打包为具有 .jar 扩展名的 JAR 文件
战争: 包含 Servlet 类文件、JSP 文件、支持文件、GIF 和 HTML 文件的 Web 模块被打包为带有 .war(Web 存档)扩展名的 JAR 文件
耳朵: 上述所有文件(.jar 和 .war)都打包为扩展名为 .ear(企业存档)的 JAR 文件并部署到 Application Server 中。
【讨论】:
为了使项目传输、部署变得容易。 需要压缩成一个文件。 .class 文件的 JAR(java 归档)组
WAR(网络存档)- 每个战争代表一个网络应用程序 - 只能使用 web 相关技术,如 servlet、jsps 可以使用。 - 可以在Tomcat服务器上运行 - 仅由 web 相关技术开发的 web 应用 jsp servlet html js - 只有信息表示没有交易。
EAR(企业存档)- 每个耳朵代表一个企业应用程序 - 我们可以使用来自 j2ee 的任何东西,比如 ejb,可以愉快地使用 jms。 - 可以在 Glassfish 之类的服务器上运行,而不是在 Tomcat 服务器上。 - 由任何技术开发的企业应用程序,来自 j2ee,如所有网络 app加ejbs jms等 - 使用信息表示进行交易。例如。银行应用、电信应用
【讨论】:
WAR (Web Archive) 是一个加载到 Java Application Server 的 Web container 的模块。 Java 应用服务器有两个容器(运行时环境)——一个是 Web 容器,另一个是 EJB 容器。
Web 容器 托管基于 JSP 或 Servlets API 的 Web 应用程序 - 专为 Web 请求处理而设计 - 因此更像是一种请求/响应风格的分布式计算。 Web 容器要求将 Web 模块打包为 WAR 文件 - 这是一个特殊的 JAR 文件,在 WEB-INF 文件夹中带有一个 web.xml 文件。
EJB 容器 托管基于 EJB API 的 Enterprise java bean,旨在提供扩展的业务功能,例如声明性事务、声明性方法级别的安全性和多协议支持 - 所以更像是一种 RPC 风格分布式计算。 EJB 容器需要将 EJB 模块打包为 JAR 文件 - 这些在 META-INF 文件夹中有一个 ejb-jar.xml 文件。
企业应用程序可能由一个或多个模块组成,这些模块可以是 Web 模块(打包为 WAR 文件)、EJB 模块(打包为 JAR 文件)或两者兼有。企业应用程序被打包为 EAR 文件——这些是特殊的 JAR 文件,在 META-INF 文件夹中包含一个 application.xml 文件。
基本上,EAR 文件 是包含WAR 文件 和JAR 文件 的超集。 Java 应用服务器允许在 WAR 文件中部署独立的 Web 模块,尽管在内部,它们创建 EAR 文件作为 WAR 文件的包装器。独立的 Web 容器,例如 Tomcat 和 Jetty 不支持 EAR 文件——这些不是成熟的应用程序服务器。这些容器中的 Web 应用程序只能部署为 WAR 文件。
在应用服务器中,EAR 文件包含应用安全角色映射、EJB 引用映射和 Web 模块的上下文根 URL 映射等配置。
除了 Web 模块和 EJB 模块之外,EAR 文件还可以包含打包为 RAR 文件的连接器模块和打包为 JAR 文件的客户端模块。
【讨论】:
.jar, .war and .ear 文件是简单的 zip 档案,因此可以被任何可以处理普通 .zip 文件的程序打开。
ejb module 定义 context-root ?为什么 ejb 模块中的 websocket 不可访问,但 war module 中的 websocket 可访问?!!!有什么解决办法吗?
JAR 文件
JAR(Java Archive 的缩写)文件允许组合多个 文件合并为一个。带有“.jar”的文件;扩展被利用 软件开发人员分发 Java 类和各种元数据。 这些还包含库和资源文件,以及附件文件 (例如属性文件)。
用户可以使用 Java Development Kit 提取和创建 JAR 文件 (JDK) '.jar' 命令。也可以使用 ZIP 工具。
JAR 文件具有可选的清单文件。清单文件中的条目 规定 JAR 文件的用途。文件类的“主”类规范 将文件表示为分离或“独立”程序。
WAR 文件
WAR(或 Web 应用程序存档)文件可以包含 XML (可扩展标记语言)文件、Java 类以及 Java 服务器 用于 Internet 应用程序的页面。它也被用来标记 构成 Web 应用程序的库和网页。文件与 “.war”扩展名包含用于服务器或 JSP(Java 服务器页面)容器。它有 JSP、HTML(超文本标记 语言)、JavaScript 和用于创建上述内容的各种文件 网络应用。
WAR 文件的结构允许特殊目录和 文件。它也可能有一个数字签名(很像一个 JAR 文件) 以显示代码的真实性。
EAR 文件
EAR(企业存档)文件将 JAR 和 WAR 文件合并到一个 单一档案。这些带有“.ear”扩展名的文件有一个目录 元数据。这些模块被打包到存档中,以实现流畅和 应用服务器内不同模块的同时操作。
EAR 文件还具有部署描述符(即 XML 文件) 这有效地决定了不同模块的部署。
【讨论】:
ejb module 定义 context-root ?为什么 ejb 模块中的 websocket 不可访问,但 war module 中的 websocket 可访问?!!!有什么解决办法吗?
J2EE 定义了三种类型的归档:
Java 档案 (JAR) JAR 文件封装了一个或多个 Java 类、一个清单和一个描述符。 JAR 文件是最低级别的存档。 JAR 文件在 J2EE 中用于打包 EJB 和客户端 Java 应用程序。
Web 档案 (WAR) WAR 文件类似于 JAR 文件,不同之处在于它们专门用于由 Servlet、JSP 和支持类制成的 Web 应用程序。
李>企业档案 (EAR) “EAR 文件包含构成特定 J2EE 应用程序的所有组件。
【讨论】:
参考:http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html
tar(磁带档案) - 使用的格式是以fileName、fileSize、fileData的串行单位写入的文件 - 无压缩。可能很大
Jar(Java 存档) - 使用的压缩技术 - 通常包含 java 信息,如类/java 文件。但可以包含任何文件和目录结构
war(网络应用程序档案) - 类似 jar 文件仅具有根据 JSP/Servlet 规范的特定目录结构,用于部署目的
ear(企业档案) - 类似于 jar 文件。具有遵循 J2EE 要求的目录结构,以便可以将其部署在 J2EE 应用程序服务器上。 - 可以包含多个 JAR 和 WAR 文件
【讨论】:
Ear 文件提供了更多选项来配置与应用服务器的交互。
例如:如果应用服务器的hibernate版本比你的依赖提供的版本旧,你可以在ear-deployer-jboss-beans.xml中添加以下内容,让JBOSS隔离类加载器,避免冲突:
<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer">
<property name="isolated">true</property>
</bean>
或者到 src/main/application/META-INF/jboss-app.xml :
<?xml version="1.0"?>
<jboss-app>
<loader-repository>
loader=nameofyourear.ear
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</jboss-app>
这将确保您的应用程序和应用程序服务器之间没有类加载器冲突。
通常,类加载器机制是这样工作的:
当一个类加载请求被提交给一个类加载器时,它首先 要求其父类加载器完成请求。家长,在 转,向其父类询问类,直到请求到达顶部 的层次结构。如果类加载器位于层次结构的顶部 无法满足请求,然后调用它的子类加载器 负责加载类。
通过隔离类加载器,您的耳朵类加载器将不会查看父类(=JBoss / 其他 AS 类加载器)。 据我所知,war 文件无法做到这一点。
【讨论】:
WAR(Web 归档)文件包含 servlet 类文件、JSP(Java servlet 页面)、HTML 和图形文件以及其他支持文件。
EAR(企业档案)文件包含 WAR 文件以及包含代码的 JAR 文件。
这些文件中可能还有其他内容,但它们基本上意味着它们听起来的意思:WAR 用于 Web 类型的东西,EAR 用于企业类型的东西(WAR、代码、连接器等)。
【讨论】:
ejb module 定义 context-root ?为什么 ejb 模块中的 websocket 不可访问,但 war module 中的 websocket 可访问?!!!有什么解决办法吗?
战争 - 网络档案。它用于根据 servlet 标准部署 Web 应用程序。它是一个 jar 文件,包含一个名为 WEB-INF 的特殊目录和其中的几个文件和目录(web.xml、lib、类)以及 Web 应用程序的所有 HTML、JSP、图像、CSS、JavaScript 和其他资源
ear - 企业档案。它用于部署包含 EJB、Web 应用程序和 3rd 方库的企业应用程序。它也是一个 jar 文件,它有一个名为 APP-INF 的特殊目录,其中包含 application.xml 文件,它包含 jar 和 war 文件。
【讨论】:
ejb module 定义 context-root ?为什么 ejb 模块中的 websocket 不可访问,但 war module 中的 websocket 可访问?!!!有什么解决办法吗?