java web应用程序的最佳实践

时间:2010-05-13 01:17:57

标签: java html eclipse apache tomcat

我正在试图找出开发和发布一个相当简单的Web应用程序的最佳方法,而且我遇到了几个问题。我将概述我所做出的决定,因为在某个地方,我显然已经脱离了轨道。非常感谢任何帮助!

我认为这是一个相当简单的Web应用程序。它包含一些引用几个java bean的jsps,以及通常的静态html,js,css和图像。

决定1)我希望有一个清晰,干净的发布程序,这样我就可以在我的本地机器上进行开发,然后可靠地发布到生产机器上。因此,我决定将应用程序打包成war文件(包括所有静态资源),以最小化我需要释放的单独的部分。到目前为止还不错?

决定2)我希望本地机器上的东西尽可能与生产环境相似。因此,在我的html中,我可能会引用一个静态文件,例如http://static.foo.com/file。为了使这段代码能够在dev和prod上无缝工作,我决定在本地开发时将static.foo.com放在我的/ etc / hosts中,这样所有的url都能正常工作而不会改变任何东西。

决定3)我决定使用eclipse和maven为我提供管理和构建项目的最佳实践环境。

所以我现在有一个很好的紧凑设置,除了:

每次我想要改变开发中的任何内容,比如html文件中的一行,我必须重建整个项目,然后等待tomcat加载战争,然后才能看出它是否是我想要的。所以我的问题是:

1)有没有办法连接eclipse和tomcat,这样我每次都不需要重建战争?即tomcat直视我的实际工作空间来提供静态文件?

2)我想我可能通过使用/ etc / hosts来反映生产网址更难做事 - 有没有更好的方法不涉及手动更改网址(相对网址当然很好,但你在哪里有一个子域名,比如一个用于静态文件,一个用于动态,你必须写出完整的路径,当然?)

3)这真的是最好的做法吗?人们如何设置,以便一方面平衡自动化,无所不包的构建过程的需求,以及能够快速开发javascript和html和css的速度和灵活性,就像一个刚刚指出的那样快apache在目录下开发了吗?人们发现了什么?

非常感谢!

编辑:非常感谢您的回复!如果我能把它们标记好,我会......这真的帮助了我。我所听到的是,最佳实践是在开发中保留webapp的结构,并在尽可能接近生产的环境中运行它。似乎人们之间的差异在于人们准备将资源热部署到servlet容器的程度,以及为了一点额外的速度或便利而绕过构建过程。那讲得通。再次感谢。

6 个答案:

答案 0 :(得分:4)

  

有没有办法连接eclipse   和tomcat让我不必   每次重建战争?

1)我认为你过分依赖你的IDE。通常我有一个Ant build.xml,它有几个任务:一个是“构建战争”,另一个是“更新jsps”。构建war会编译所有代码,将其打包,将其部署到Tomcat并重新启动所有代码。更新jsps不会重新启动服务器,它只是从我的本地文件直接复制到Tomcat的已部署实例。不需要重新启动,因为它们是JSP。需要大约半秒钟。

  

你有很多子域名,比如说   一个用于静态文件,一个用于   动态,你必须写出来   完整的道路,当然?

2)没办法,何塞。所以你的意思是服务器名称改变的任何时候,你必须重新编译你的代码?如果您需要支持动态URL,您可能只想咬紧牙关并查看一个框架来为您做繁重的工作。我偏爱Stripes(支持开箱即用的动态URL重写)......还有其他人。

答案 1 :(得分:4)

这就像我在工作中所做的那样,虽然我们使用ant(现在?)。此外,当我使用IDE(或两个)时,我拒绝将一个作为构建过程的一部分,EVER。有人需要能够理解和调整你的构建。

答案 2 :(得分:3)

要回答#1,我建议如下:

  1. 花一些时间学习maven来建立你的.war而不是日食。适当的原型并不是那么难。有关详情,请参阅此处:http://maven.apache.org/guides/mini/guide-webapp.html
  2. Maven可以通过mvn eclipse:eclipse或使用m2插件
  3. 生成eclipse项目
  4. 要部署到本地计算机和生产,请使用maven cargo插件。 http://cargo.codehaus.org/Maven2+pluginhttp://blank.jasonwhaley.com/2010/03/automated-deployment-with-cargo-drive.html
  5. 要回答问题#2,修改/ etc / hosts文件以模仿生产没有任何问题。只需一个快速脚本,您可以添加/删除这些条目并刷新您的DNS缓存。我一直这样做。 (务必通过相关设置使浏览器经常清除其缓存)。

    回答问题#3)是的,这就是你应该做的事情。每个构建都应该生成一个可部署的工件,您可以在一个步骤中部署到任何环境。您需要确保在没有IDE的情况下可以执行此操作,并且仅将IDE用作在开发阶段帮助您的工具。

答案 3 :(得分:2)

其他人已经回复了你,我只是对此发表评论(这个评论太长了,所以我做了回答):

  

每次我想改变什么   在发展中,就像一条线   html文件,我必须重建   整个项目然后等待   我可以在tomcat之前加载战争   看看它是不是我想要的。

如果更改html文件中的一行,则无需重建整个项目。

请注意,我总是重建完整的 .war 并重新部署我的 .war ,但这需要不到两秒钟(不到一秒钟)重新压缩.war [这真的是.war是一个压缩文件]并且重新部署不到一秒钟)因为:

  • 当您只需更改html文件中的一行时,您无需重新编译整个项目

当您更改一个 .java 文件时也是如此:您只需重新编译该文件并重新加入战争。

我从头开始编写自己的Ant构建文件(这里没有Maven),我有几个目标。我可以强制“清理构建”,这将重新编译所有内容,但通常我只是重新打包并重新部署.war

您可以自己检查:构建.war,将其解压缩,比如目录 dir1 ,然后修改一个.html(或一个.java / .class文件)并构建一个新的.war并解压缩那个新的.war,比如说, dir2

然后比较 dir1 dir2 :现在修复您的构建过程,以便您可以创建第二个 .war ,而无需重新编译所有内容。

更改一个.html,.java,.jsp,.css,.js /任何文件并重新部署一个新的.war应该只需几秒钟(如果你没有把厨房水槽扔进你的话,不到两秒钟web应用)。

请注意,在同一个项目中,这里的另一个开发人员更喜欢直接在爆炸的webapp中“热部署”/替换文件(我更喜欢每次重新部署.war,因为我的完整重新包装/重新部署只需不到两秒钟我很好,就这样。)

答案 4 :(得分:2)

如果您的项目是Eclipse中的Dynamic Web App并且正确配置了Tomcat服务器,则无需重建war文件。请按照以下说明操作:

1)查看以下如何使用eclipse配置tomcat服务器:    http://greatwebguy.com/programming/eclipse/make-eclipse-and-tomcat-play-nice-together/

2)为您的应用程序使用相对路径,但不使用绝对路径。

3)如果你正确地遵循了上述两个步骤,那么你就拥有了最佳的发展环境。

答案 5 :(得分:1)

在开发期间,您应该配置eclipse和tomcat,以便不需要重建/重新部署。只需修改html / css / jsp等,保存并刷新浏览器即可查看结果。

但在部署到生产站点之前,您应该进行干净的完整构建并仔细测试。

域:它们应该在配置文件中; dev和prod应该有不同的配置文件。