2010-05-13 78 views
5

我想弄清楚開發和發佈一個相當簡單的web應用程序的最佳方式,而且我遇到了幾個問題。我將概述我所做的決定,因爲我已經清除了一些地方......非常感謝任何幫助!java 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來反映生產url - 是否有更好的方式,不涉及手動更改url(相對URL當然是好的,但在哪裏你有很多子域,比如一個用於靜態文件,一個用於動態,你必須寫出完整的路徑,當然?)

3)這是否是最佳實踐?人們如何進行設置,以便平衡一個自動化,全面構建過程的需求,以及快速和靈活地快速開發javascript和html和css的速度,就像剛剛指出的那樣快apache在目錄和開發生活?人們找到什麼作品?

非常感謝!

編輯:謝謝你的迴應!如果我可以標記他們,我會..這真的幫了我。我所聽到的是,最佳實踐是在開發中保存webapp的結構,並在儘可能接近生產環境的情況下運行它。似乎人們之間的差異在於人們準備將資源熱部署到servlet容器中的程度,從而繞過構建過程以獲得一點額外的速度或便利。這就說得通了。再次感謝。

回答

3

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

  1. 花一些時間來學習Maven構建你的.war無蝕。用適當的原型並不難。在這裏看到更多的細節:http://maven.apache.org/guides/mini/guide-webapp.html
  2. Maven可以或者通過mvn eclipse:eclipse或使用M2插件
  3. 部署到本地計算機和生產產生Eclipse項目,使用maven貨物插件。 http://cargo.codehaus.org/Maven2+pluginhttp://blank.jasonwhaley.com/2010/03/automated-deployment-with-cargo-drive.html

要回答問題#2,修改/ etc/hosts文件以模仿生產沒有任何問題。只需要一個快速腳本,可以添加/刪除這些條目並刷新您的dns緩存。我一直這麼做。 (請務必通過相關設置讓瀏覽器頻繁清除緩存)。

要回答問題#3)是的,這是你應該如何做的事情。每個構建應產生一個可部署的工件,您可以一步將其部署到任何環境中。您需要確保在沒有IDE的情況下可以執行此操作,並且只能將IDE用作工具在開發階段爲您提供幫助。

+0

謝謝Whaley。所以我很清楚 - 你是否確認,即使我想說,在JavaScript中放入一個快速警報,或者在HTML文件中糾正某些文本中的錯字,我需要等待戰爭到重建,然後部署(即使自動)到我的開發servlet容器中,然後才能看到我的更改結果?如果是這樣,那麼與僅僅在項目文件中指出正確內容的效率相比,這種感覺非常高興。我理解正確嗎,還是我錯過了什麼? – Jeremy 2010-05-13 01:42:44

+0

這正是我所建議的。如果您的生產部署由.war丟棄組成,那麼您的開發部署應該也是這樣。 Java webapps被打包和部署爲戰爭 - 當你不試圖解決這個約定時,我發現生活總是容易得多。 – whaley 2010-05-13 02:13:34

+0

使用Eclipse的webtools/EE版本,您可以將項目與本地tomcat(或其他容器)安裝「鏈接」,因此您可以預覽小的更改而無需等待戰爭生成/部署。 – agnul 2011-03-08 16:24:00

4

有每次連接最多蝕 和tomcat,這樣我就不必 重建戰爭的方式?

1)我認爲你太依賴IDE了。通常我有一個Ant build.xml,它有幾個任務:一個是「構建戰爭」,另一個是「更新jsps」。構建戰爭編譯所有代碼,打包它,將其部署到Tomcat並重新啓動一切。更新jsps不會重新啓動服務器,它只是從我的本地文件到Tomcat部署的實例的直接副本。由於它們是JSP,因此不需要重新啓動。需要大約半秒。

,你有很多的子域,說 一個靜態文件,一個用於 動態,你寫出來的 完整路徑,肯定?

2)沒辦法,何塞。所以你的意思是任何時候服務器名稱改變了,你必須重新編譯你的代碼?如果您需要支持動態網址,您可能只想咬緊牙關,看看一個框架,爲您完成繁重的工作。我偏向於Stripes(它支持動態URL重寫開箱即用)......還有其他的。

+0

對不起,我沒有非常明確的關於子域名的點。我的意思是說,如果你的代碼中只有像href = file.html這樣的相關網址,那麼它們在dev和prod上同樣適用。但是如果你有一個位於www.foo.com的文件f.html,它的html引用位於STATIC.foo.com的文件f2.html,例如href = http://STATIC.foo.com/f2.html,那麼你可以通過在你的/ etc/hosts文件中添加條目來使得這些url仍然可以在dev和prod中正常工作,如下所示: 127.0.0.1 www.foo.com STATIC.foo.com 現在在開發中,這些URL都解決了你的本地機器,這是你想要的,而不需要改變代碼。 – Jeremy 2010-05-13 02:11:36

+0

如果你絕對必須指定完整的URL,我認爲你現在的方法可能是最好的。我肯定會採納Whaley的建議:使流程的這一部分自動化。 – 2010-05-13 02:34:53

4

這很像我在工作中要做的事,儘管我們使用ant(現在?)。另外,當我使用一個IDE(或兩個)時,我拒絕有一個作爲我的構建過程EVER的一部分。有人需要能夠理解和調整你的構建。

+0

免責聲明:我打破玩具/一次性項目的「無IDE構建」。但不適用於發佈到生產工作環境中的東西。 – Roboprog 2010-05-19 01:23:16

2

其他人已經回答了你,我會在這個剛剛發表評論(此太長評論BTW,所以我讓一個答案):

每次我想在發展中改變什麼 ,像一個 html文件中的一行,我必須重建整個項目 ,然後等待 tomcat加載該戰爭,然後我才能夠 查看它是否是我想要的。

如果您更改html文件中的一行,則無需重建整個項目。

注意,我總是重建充分的.war和重新部署我的.war但這需要不到兩秒鐘(少於一秒重新壓縮將.war [這真是一個.war是什麼,一個壓縮文件,並小於一秒重新部署),因爲:

  • 你不需要重新編譯整個項目時,只需在一個HTML文件

同時改變一行你改變一個.java文件:你可以簡單地重新編譯一個文件並重新打包。

我從頭開始編寫我自己的Ant構建文件(這裏沒有Maven),我有幾個目標。我可以強制執行一個「clean build」,它會重新編譯所有內容,但通常我只是重新打包並重新部署.war。您可以自己檢查:構建.war,將其解壓縮到目錄中dir1,然後修改一個.html(或一個.java/.class文件)並構建一個新的.war,然後解壓縮該新的.war,例如,dir2

然後比較DIR1DIR2:現在解決您的構建過程,這樣就可以創建第二的.war而無需重新編譯一切。

更改一個.html,.java,.jsp,.css,.js /任何文件並重新部署一個新的.war應該是幾秒鐘的事情(少於兩秒鐘,如果你沒有扔廚房水槽你的Webapp)。

請注意,在同一個項目中,另一位開發人員更喜歡在展開的Web應用程序中直接「熱部署」/替換文件(我更喜歡每次都重新部署一個.war,因爲我的完整重新打包/重新部署少於兩次幾秒鐘,我很好,這樣)。

+0

哎呀,忘了說清楚:我有一臺真正快速的Linux工作站,內存很小,所以事情往往會比我的同事系統更快(誰在OS X MacBook Pro上, ,但遠不及我的系統):)但是,一切都應該是幾秒鐘的事情。 [順便說一句,我有一個MBP,因爲當我在跑步:這不是一個便宜的蘋果拍攝] – SyntaxT3rr0r 2010-05-13 06:00:42

2

如果您的項目是Eclipse中的動態Web應用程序並正確配置了Tomcat服務器,則不需要重新構建war文件。按照下面的說明:

1)看看下面的如何用eclipse配置Tomcat服務器: http://greatwebguy.com/programming/eclipse/make-eclipse-and-tomcat-play-nice-together/

2)使用你的應用程序相對路徑而不是絕對路徑。 3)如果您正確執行了上述2個步驟,那麼您擁有最佳的開發環境。

1

在開發過程中,您應該配置eclipse和tomcat,以便不需要重建/重新部署。只需修改html/css/jsp等,保存並刷新瀏覽器即可查看結果。

但在部署到生產站點之前,您應該進行乾淨的完整構建並仔細測試。

域:它們應該在配置文件中; dev和prod應該有不同的配置文件。

相關問題