java web应用程序最佳实践

java web应用程序最佳实践,java,html,eclipse,apache,tomcat,Java,Html,Eclipse,Apache,Tomcat,我试图找出开发和发布一个相当简单的web应用程序的最佳方法,但我遇到了几个问题。我将概述我所做的决定,因为我显然在某些方面偏离了轨道。。非常感谢您的帮助 我有一个我认为相当简单的web应用程序。它包含两个JSP,它们引用了两个JavaBean,以及常见的静态html、js、css和图像 决策1)我希望有一个清晰的发布程序,这样我就可以在本地机器上开发,然后可靠地发布到生产机器上。因此,我决定将应用程序打包到一个war文件(包括所有静态资源)中,以最大限度地减少我需要发布的各个部分。到目前为止还好

我试图找出开发和发布一个相当简单的web应用程序的最佳方法,但我遇到了几个问题。我将概述我所做的决定,因为我显然在某些方面偏离了轨道。。非常感谢您的帮助

我有一个我认为相当简单的web应用程序。它包含两个JSP,它们引用了两个JavaBean,以及常见的静态html、js、css和图像

决策1)我希望有一个清晰的发布程序,这样我就可以在本地机器上开发,然后可靠地发布到生产机器上。因此,我决定将应用程序打包到一个war文件(包括所有静态资源)中,以最大限度地减少我需要发布的各个部分。到目前为止还好吗

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

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

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

每次我想更改开发中的任何内容,比如html文件中的一行,我都必须重新构建整个项目,然后等待tomcat加载war,然后才能看到它是否是我想要的。因此,我的问题是:

1) 有没有办法将eclipse和tomcat连接起来,这样我就不必每次都重建战争?ie tomcat直接查看我的实际工作区来提供静态文件

2) 我想我使用/etc/hosts来反映生产URL可能会让事情变得更难——有没有更好的方法不需要手动更改URL(相对URL当然可以,但是如果有很多子域,比如一个用于静态文件,一个用于动态文件,那么您必须写出完整的路径?)

3) 这真的是最佳实践吗??人们如何设置这些东西,以便一方面平衡对自动化、全方位构建过程的需求,另一方面平衡能够快速开发javascript、html和css的速度和灵活性,就像将apache指向目录并实时开发一样快?人们发现什么工作

非常感谢

编辑:谢谢大家的精彩回复!如果我能做好标记,我会。。这真的帮了我大忙。我所听到的是,最佳实践是在开发过程中保留webapp的结构,并在尽可能接近生产环境的环境中运行。看起来人与人之间的区别在于人们准备在多大程度上将资源热部署到servlet容器中,绕过构建过程以获得一点额外的速度或便利。这是有道理的。再次感谢。

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

  • 花些时间学习maven来构建没有eclipse的.war。使用合适的原型并不难。有关更多详细信息,请参见此处:
  • Maven可以通过
    MVNClipse:eclipse
    或使用m2插件生成eclipse项目
  • 要部署到本地机器和生产环境,请使用maven cargo插件。及
  • 为了回答问题2,修改/etc/hosts文件以模拟生产并没有什么错。只要有一个快速脚本,让你添加/删除这些条目,并刷新你的dns缓存。我一直都是这么做的。(请确保您的浏览器也通过其相关设置经常清除其缓存)

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

    有没有办法连接eclipse 还有tomcat这样我就不用 每次重建战争

    1) 我觉得你太依赖IDE了。通常我有一个Ant build.xml,它有两个任务:一个是“构建war”,另一个是“更新JSP”。构建war编译所有代码,打包,部署到Tomcat,然后重新启动一切。更新JSP不会重新启动服务器,它只是将本地文件直接复制到Tomcat部署的实例。无需重新启动,因为它们是JSP。大约需要半秒钟

    比如说,你有很多子域 一个用于静态文件,一个用于 动态的,你必须写出 完全正确吗


    2) 不行,何塞。那么,你的意思是,每当服务器名称更改时,你都必须重新编译代码?如果您需要支持动态URL,您可能只想咬紧牙关,看看一个框架,为您完成繁重的工作。我喜欢(它支持即时动态URL重写)。。。还有其他的。

    这很像我在工作中必须做的事情,尽管我们使用ant(现在?)。此外,当我使用一个(或两个)IDE时,我拒绝在构建过程中使用IDE。需要有人能够理解并调整您的构建。

    其他人已经回答了您的问题,我将对此进行评论(顺便说一句,评论时间太长了,所以我会回答):

    每次我想改变什么 在开发中,就像一条线中的一条线 html文件,我必须重建 整个项目,然后等待 tomcat在我之前就开始了战争 看看这是不是我想要的

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

    请注意,我总是重建完整的.war并重新部署我的.war,但这只需要不到两秒钟的时间(不到0秒)