html嵌入war_WAR文件与具有嵌入式服务器的Java应用程序

html嵌入war

大多数服务器端Java应用程序(例如,面向Web或面向服务的)都打算在容器中运行。 打包这些应用程序以进行分发的传统方法是将它们捆绑为WAR文件。 这只不过是具有标准目录布局的ZIP存档,其中包含运行时所需的所有库和应用程序级依赖项。 这种格式几乎可以互操作,并且可以部署到您喜欢的任何服务器容器,Tomcat或Jetty,JBoss或GlassFish等。

嵌入式Java服务器300x229 但是,还有另一种流派完全颠覆了这种模式。 通过这种方法,Java应用程序像任何普通应用程序一样被打包用于命令行执行。 嵌入式容器不是部署到容器,而是部署在应用程序本身中!

这对于使用多种语言的课程来说是一样的。 适用于Python的Django框架包括用于开发和测试的捆绑服务器,而Ruby on Rails附带了一个用于生产的嵌入式服务器。 这个概念在Java中已经存在了一段时间, Jetty专攻嵌入式利基市场。 但是,这与规范相去甚远,事实上的标准仍然是可以部署到Tomcat的WAR文件。

但是,嗡嗡声越来越大。 在去年的DevNexus会议上,我参加了James Ward的会议,当时他是Heroku的“开发者”。 捆绑您自己的容器是将应用程序部署到Heroku的基于云的平台的推荐方法,James是一个大力支持者 。

他的会议专门针对Java和Scala的Play框架,该框架以类似于Rails服务器的方式嵌入Netty 。 与Grails不同, Grails使用Django风格的服务器进行开发,然后将其作为WAR文件发布,而Play则打算在生产过程中一直使用自己的服务器。 James在所有Java应用程序中都倡导了这种方法。

一场嵌入式冒险

Hibernate搜索书封面-242x300
我至少喝了一口Kool-Aid。 当我开始编写示例Hibernate Search by Example时 ,我想将重点放在Hibernate Search上,而不是其他任何框架或服务器问题上。 因此,我避开了Spring,并使用普通的Servlet 3.0方法编写了本书的示例应用程序。

我通常在自己的开发环境中使用Eclipse,并将其指向本地Tomcat实例以测试Web应用程序。 但是,我想为喜欢使用IntelliJ,Netbeans或根本不使用IDE的读者提供支持。 因此,我决定将构建脚本嵌入测试服务器,以便读者可以运行示例而无需安装或配置任何东西。

在Maven中使用嵌入式服务器

我的第一个目标只是从我的Maven构建脚本中启动服务器,因此读者不必安装服务器或将其集成到IDE中。 我以前看过这件事,这很简单,只需将Jetty Maven插件添加到项目的POM中即可。 读者应该能够使用以下命令构建示例应用程序并一步一步启动它:

mvn clean jetty:run

由maven内置300x99 嗯,不是那么快。 您应该能够对静态内容进行更改,并看到更改在服务器运行时立即生效。 但是,我遇到了有关文件被锁定的错误。 在花了一些时间进行研究之后,我发现Jetty的默认设置在Windows文件锁定中效果不佳。 可以通过在一个配置文件中切换一个属性来解决此问题。

但是,您必须打开Jetty JAR文件才能获取此配置文件的正确副本。 首先,你要挖围绕本地Maven回购,并找出哪些 JAR文件破解打开(它原来是码头,web应用,而不是码头服务器)。 一旦获得了webdefault.xml文件的副本并切换了useFileMappedBuffer设置,就必须将副本保存在项目中的某个位置,并更新Maven POM以使其在此处而不是在Jetty JAR内部:

<plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.7.v20120910</version><configuration><webAppConfig><defaultsDescriptor>${basedir}/src/main/webapp/WEB-INF/webdefault.xml</defaultsDescriptor></webAppConfig></configuration>
</plugin>

好吧……比我预期的麻烦得多,但是我可以解决这个问题。

将嵌入式服务器与其他构建系统一起使用

我知道许多Java开发人员都讨厌Maven。 因此,我想提供使用Ant构建的本书示例应用程序的版本,以说明如何适应默认概念。 那么,我应该在build.xml中添加哪一行来使Ant使用Jetty?

蚂蚁 嗯,不是那么快。 用于码头Ant集成 ,但它比Maven的更繁琐。 即使您正在使用诸如Ivy之类的依赖项管理系统,您的Ant脚本也无法为您下载和管理嵌入式服务器。 相反,您必须下载完整的独立Jetty服务器,然后手动将其片段复制到您的项目中。 谁不希望将6兆的可执行二进制文件提交到源代码管理中?

在Jetty服务器JAR上复制后,您需要手动添加另一个JAR文件以进行Ant集成。 令我惊讶的是,我发现最新的受支持版本是Jetty 7,实现了将近8年的Servlet 2.5规范。

我看到他们终于在上个月添加了Jetty 8,但是当我去年秋天写这本书时,这对我没有帮助。 我不得不为Servlet 2.5而不是3.0重写这个示例应用程序的版本,并且开始怀疑这是否真的值得。

通过代码使用嵌入式服务器矩阵码150x150

本书的最后这一章讨论了在集群服务器环境中运行的Hibernate Search应用程序。 Maven插件纯粹是单实例的,因此我决定编写一个小的引导程序类,该类将在语法上在不同端口上启动两个Jetty实例。 通过将此类构造为JUnit测试,我仍然可以让Maven像这样自动启动它:

mvn clean compile war:exploded test

嗯,不是那么快。 启动时未注册我的应用程序的Servlet,侦听器和RESTful服务。 经过更多的浪费时间之后,我发现有很多不同的Jetty “味道”可用,默认情况下启用或禁用Servlet 3.0功能(例如注释)。

老实说,我仍然不完全了解如何分辨“高潮”和“非高潮”之间的区别。 我只能告诉您的是,为了使注释能够正常工作,我必须将这段代码添加到我的bootstrap类中:

...
masterContext.setConfigurations(
new Configuration[] {
new WebInfConfiguration(),
new WebXmlConfiguration(),
new MetaInfConfiguration(),
new FragmentConfiguration(),
new EnvConfiguration(),
new PlusConfiguration(),
new AnnotationConfiguration(),
new JettyWebXmlConfiguration(),
new TagLibConfiguration()
}
);
...

比将WAR文件拖放到Tomcat的/ webapps文件夹中更简单,更直观,对吗?

从控制台和云使用嵌入式服务器

完成本书后,我希望将示例代码的演示版本推送到GitHub并部署到Heroku 。 从理论上讲,Heroku可以运行可以从命令行在本地运行的任何应用程序。 如果Heroku找到了Maven POM,它将运行mvn clean软件包,然后执行您在名为Procfile的脚本中放置的所有启动命令。

终端图标150x150 我的程序化Jetty启动器在Maven运行的情况下运行良好。 但是,Maven在测试时正在管理我的类路径依赖项,现在我需要在没有该帮助的情况下可以使用Jetty。 Heroku在其演示Java应用程序中使用的推荐方法是将您的应用程序与Tomcat的一个文件版本捆绑在一起。 太棒了,无论如何我对Tomcat更加熟悉!

嗯,不是那么快。 如果您的应用程序希望将数据库连接(或其他任何东西)注册为JNDI资源,那么您就自己决定了。 Heroku捆绑的Tomcat运行程序不支持JNDI设置。 嗯......也许这就是为什么Heroku的香草servlet的演示并没有真正做什么,以及为什么只演示应用程序, 做一些事情,而不是是基于Spring。 现在我考虑了一下,James Ward去年离开了Heroku,为TypeSafe工作,自从他离开后,Heroku就没有对其Java网站进行任何更新。 喝了

云150x150
不用担心,因为有一个类似的单文件Jetty Runner ,它确实允许您将JNDI设置作为命令行参数传递。 此外,我们已经投入了大量时间来解决嵌入式Jetty的所有问题!

嗯,还是太快了。 如果您在JSP视图中使用JSTL taglib(即您生活在21世纪),那么Jetty Runner会让您陷入混乱 。 从命令行运行它时,您需要将参数传递给Java,以实现以下目的:

  1. Jetty Runner JAR文件
  2. 您的Web应用程序的WAR文件(*)
  3. 在Maven构建期间生成的WAR文件的分解版本

(*)您没看错。 经过所有这些嵌入式噩梦之后,Heroku 实际上仍在使用WAR文件

我的Heroku个人资料最终看起来像这样:

web: java $JAVA_OPTS -jar target/dependency/jetty-runner-8.1.7.v20120910.jar --lib target/hibernate-search-demo-0.0.1-SNAPSHOT/WEB-INF/lib --port $PORT --jdbc org.apache.commons.dbcp.BasicDataSource "url=jdbc:h2:mem:vaporware;DB_CLOSE_DELAY=-1" "jdbc/vaporwareDB" target/*.war

这里有一个以上的类加载器,这使Jetty Runner可以从其类路径而不是Web应用程序的类路径加载JSTL / taglib东西。

结论

苹果派150x150 从一开始就将嵌入式服务器概念嵌入框架中,嵌入式服务器概念就没有本质上的错误。 编写Play应用程序是一种乐趣,并且在Heroku上部署它们几乎微不足道。 在日常工作中,我使用基于Spring的商务程序包hybris ,该程序包的扩展构建系统将Tomcat服务器捆绑到您的应用程序中。 只要您不需要过多定制构建脚本,就可以正常工作。

风管胶带婴儿150x150 另一方面,该概念对于广泛的通用用途而言太脆弱和脆弱。 用管道将嵌入式服务器连接到普通Java应用程序上纯属痛苦。 您也许可以坚持别人的工作示例的安全性,但是当您的应用执行任何不同的操作时,您就可以自行解决损坏问题。 把我的嵌入式冒险带到上面,并与使用Tomcat的“麻烦”进行对比:

  1. 下载Tomcat并将其解压缩到某个位置
  2. 将您的WAR文件拖放到Tomcat的/ webapps子目录中
  3. 启动Tomcat

我获得的唯一真正优势是能够在Heroku上运行演示的能力。 但是,云提供商的Java支持每天都在提高。 Jelastic允许您立即将普通的WAR文件部署到Tomcat 7或GlassFish 3。 AppFog支持部署到Tomcat 6 ,即将支持Tomcat 7 。 我怀疑在不久的将来, 修改应用程序以进行云部署的想法将被视为不合时宜。

简而言之,这取决于您使用的框架。 如果嵌入式服务器是嵌入式的,那么它们可能会很酷。 如果将它们用胶带固定,则可能会很可怕。 如果我今天写的是Hibernate Search by Example ,则示例应用程序构建脚本将产生两件事:一个WAR文件和一个Tomcat下载链接。

参考:来自stefperkins.net博客的JCG合作伙伴 Steve Perkins的WAR文件与带有嵌入式服务器的Java应用程序的比较 。

翻译自: https://www.javacodegeeks.com/2014/03/war-files-vs-java-apps-with-embedded-servers.html

html嵌入war

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞畅科技 光纤收发器的网管型和非网管型介绍

光纤收发器按网管类型来分&#xff0c;可以分为网管型光纤收发器和非网管型光纤收发器。那么&#xff0c;光纤收发器的网管型和非网管型是什么呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 一、管理类型分类 非网管型以太网光纤收发器&#x…

[渝粤教育] 四川大学 模拟电子技术基础(Ⅰ) 参考 资料

教育 -模拟电子技术基础&#xff08;Ⅰ&#xff09;-章节资料考试资料-四川大学【】 绪论测验题 1、【单选题】当输入信号频率为fL或fH时&#xff0c;放大电路电压增益的幅值约下降为通带内水平增益的 。 A、0.5倍 B、0.7倍 C、0.9倍 D、1倍 参考资料【 】 2、【单选题】某放大…

光纤收发器连接不同端口的注意事项详解

光纤收发器在传输产品类&#xff0c;可以说是使用最多。其作用也是不言而喻。光纤收发器有多种不同的分类&#xff0c;而实际使用中大多注意的是按光纤接头不同而区分的类别&#xff1a;SC接头光纤收发器和FC以及FST接头光纤收发器。今天&#xff0c;飞畅科技的小编就告诉大家在…

光纤收发器指示灯的意义图解

光纤收发器有六个LED指示灯&#xff0c;显示收发器的工作状态。根据LED&#xff0c;可以确定收发器是否正常工作并且可能有问题&#xff0c;这有助于识别故障。那么&#xff0c;光纤收发器的每个指示灯分别代表什么意思呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细…

四个方面快速排查工业级光纤收发器死机原因

工业级光纤收发器可以将网络传输距离大幅度提高&#xff0c;以更好地满足接入网的建设需要&#xff0c;所以工业级光纤收发器在工业通信领域使用场景很多。大家在使用时&#xff0c;可能会遇到工业级光纤收发器出现死机的现象&#xff0c;出现死机时&#xff0c;我们要怎么找出…

网管型光纤收发器功能介绍

光纤收发器可以分为网管型光纤收发器和非网管型光纤收发器&#xff0c;对于可网管的光纤收发器还可以细分为局端可网管和用户端可网管。今天&#xff0c;飞畅科技的小编来为大家详细介绍下网管型光纤收发器系统技术特点&#xff0c;一起来看看吧&#xff01; 网管光纤收发器系…

什么是光纤放大器?光放大器的原理是什么?

工业数据通信领域有很多的专业词汇&#xff0c;比如以太网、光放大器、协议转换器等。同时&#xff0c;工业通信领域也有众多的产品&#xff0c;工业交换机、工业级光纤收发器、光纤放大器、光纤延长器、协议转换器等&#xff0c;我们要搞懂这些产品&#xff0c;就先要搞懂一些…

光纤收发器测试方法和流程介绍

光纤收发器在工业传输系统组网起到重要作用&#xff0c;随着工业通信领域的高速发展&#xff0c;对光纤收发器的供求也增多。那么&#xff0c;你知道光纤收发器的测试方法和流程吗&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下光纤收发器测试方法和流程&#xff0c;…

光纤收发器的7大挑选技巧

光纤收发器&#xff0c;是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;在很多地方也被称之为光电转换器&#xff08;Fiber Converter&#xff09;。那么&#xff0c;光纤收发器的选购技巧有哪些呢&#xff1f;接下来由工业交换机厂…

光纤收发器的详细选择方法

光纤收发器做为一个区域网络连接器设备&#xff0c;其主要的任务就是怎样很好地把两方数据进行无缝连接。所以必须考虑其与周边环境相互兼容性的配合&#xff0c;及本身产品的稳定性&#xff0c;所以大家在选择一定的考虑各方面因素问题。接下来就由飞畅科技的小编来为大家详细…

春天重新审视战略模式

这篇博客文章希望展示另一种方法&#xff0c;该方法如何通过依赖注入实现策略模式。 作为DI框架&#xff0c;我选择Spring框架 首先&#xff0c;让我们看一下如何以经典方式实施策略模式。 作为起点&#xff0c;我们有一个HeroController &#xff0c;应该在HeroRepository添…

[渝粤教育] 沈阳农业大学 有机化学 参考 资料

教育 -有机化学-章节资料考试资料-沈阳农业大学【】 1.1 有机化合物和有机化学随堂测验 1、【单选题】下列化合物中&#xff0c;不是有机化合物的是&#xff08; &#xff09; A、叶绿素 B、 氯仿 C、尿素 D、 氨气 参考资料【 】 2、【单选题】下列不是有机化合物的特点的是&a…

光纤收发器的选购原则介绍

光纤收发器做为一个区域网络连接器设备,其主要的任务就是怎样很好地把两方数据进行无缝连接。所以必须考虑其与周边环境相互兼容性的配合,及本身产品的稳定性、可靠性&#xff0c;反之&#xff1a;价格再低&#xff0c;也不能选用&#xff01;那么&#xff0c;光纤收发器的选购…

[渝粤教育] 洛阳理工学院 基础素描 参考 资料

教育 -基础素描-章节资料考试资料-洛阳理工学院【】 第一章 单元测验 1、【单选题】开创学院派素描教学体系的画家是谁 A、达芬奇 B、卡拉奇兄弟 C、安格尔 D、丢勒 参考资料【 】 2、【单选题】以下哪个不是素描常用工具 A、油画棒 B、铅笔 C、素描纸 D、橡皮 参考资料【 】 3…

光纤收发器让网络布线变的更方便

光纤收发器是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;在很多地方也被称之为光电转换器。光纤收发器的应用让网络布线变的更方便&#xff0c;接下来我们就跟随飞畅科技的小编来详细了解下吧&#xff01; 企业在进行信息化基础…

[渝粤教育] 盐城师范学院 光学 参考 资料

教育 -光学-章节资料考试资料-盐城师范学院【】 判断题 1、【判断题】1-1下列说法正确吗&#xff1f;&#xff08;a&#xff09;相干叠加服从波的叠加原理&#xff0c;非相干叠加不服从波的迭加原理。 A、正确 B、错误 参考资料【 】 2、【判断题】1-1下列说法正确吗&#xff1…

如何从使用环境上区别光纤收发器?

根据针对不同环境&#xff0c;就需求不同性质产品。光纤收发器也一样有工业级和商业级之分&#xff0c;但是又区别于市场上TP-LINGK和D-link等(这些是家庭使用的3C电子产品很低端&#xff0c;大部分是回收二手货元器件生产&#xff0c;客户群体及应用的环境不一样)。在使用环境…

[渝粤教育] 苏州科技大学 混凝土结构设计原理 参考 资料

教育 -混凝土结构设计原理-章节资料考试资料-苏州科技大学【】 第1章测试 1、【单选题】均布荷载作用下简支梁上部受压下部受拉的试验被称为 A、路标试验 B、钢标试验 C、混标试验 D、简支梁试验 参考资料【 】 2、【单选题】钢筋混凝土结构中钢筋主要受&#xff08; &#xff…

[渝粤教育] 西北工业大学 机械原理 参考 资料

教育 -机械原理-章节资料考试资料-西北工业大学【】 第一周单元测验 1、【单选题】手机属于。 A、机械 B、机构 C、机器 D、即不属机构&#xff0c;也不属机器 参考资料【 】 2、【单选题】下列常用装置哪些属于机器。 A、电动卷扬机 B、折叠烫衣板 C、手动窗扇开闭装置 D、汽车…

16槽双电源机架式光纤收发器产品优势介绍

双电源光纤收发器能满足远距离、高速、高宽带的快速以太网工作组用户的需要。产品性能稳定可靠&#xff0c;符合以太网标准&#xff0c;并具有防雷击保护措施。双电源光纤收发器适用于电信及各种宽带数据网要求高可靠性数据传输或组建IP数据传输专网的领域&#xff0c;是宽带校…