2012-05-01 48 views
1

如果我們可以讓Tomcat/Jasper使用ANT任務編譯JSP,那麼將WAR預編譯的JSP作爲類文件而不是JSP本身更好嗎?將WAR的類文件(而非JSP本身)發佈到WAR中會更好嗎?

這樣一來,我們就不會受到Weblogic/Webshere JSP編譯問題的束縛。他們得到的所有內容都是'class'文件。

我認爲這需要「jsp」servlet不得不關閉。 Spring/Struts Servlet必須能夠處理'jsp'擴展。

您認爲如何?在其他生產環境中更常見的是什麼?

+0

我又創建了一個類似於這個的Q.看起來像「標準實踐」是運送JSP文件http://stackoverflow.com/q/10414823/233306 – rk2010

回答

1

我通常會說不,它不會更好。我覺得要經歷很多麻煩,然後只是將耳朵包裝起來,然後再打包運輸。

如果您的JSP不在生產環境中編譯,並且正在本地編譯或在QA中編譯,那麼您還有其他問題需要解決。

+0

在過去,我看到了一個問題,特定的Websphere無法編譯JSP,因爲一些taglib問題。我們無法真正保護自己免受這種不可預測的事情的影響。現在人們正在期待對Caucho,樹脂等的支持。 – rk2010

+0

我認爲這個問題有點與jsp-api 1.x或2.x的後向兼容性。這是一個我們從來沒有打擾過的瓶子,因爲Weblogic只是給了我們。 – rk2010

+0

如果由於諸如支持Caucho,樹脂或向後兼容性問題等隨機事件而導致編譯問題,那麼爲什麼您不希望運行時錯誤也適用於這些問題?我知道有時候你需要編譯庫,你不一定需要運行,但我仍然期望在這些情況下出現問題。 –

2

JSP的編譯具有以下優點。

  • 你確定它可以被編譯,即在運行時沒有意外。
  • 當用戶第一次到達JSP時,您可以節省一些時間。

我認爲第一個優勢很重要,第二個優勢並不那麼重要。我個人不關心在編譯jsp的時候,第一個也是唯一的第一個用戶會等一兩秒鐘。但是我非常關心現在的用戶在使用我的應用程序時不會出現編譯錯誤。

我認爲在編譯期間編譯JSP足夠用於驗證,並且不會將生成的.class文件打包到您的應用程序中。但分發.class文件也很好。

1

編譯的JSP不能跨容器移植。它們擴展運行時特定的類。你總是可以嘗試嵌入你自己的JSP實現,但這是一個不同的問題。

+0

編譯好的JSP的類文件怎麼樣?如果我使用Jasper生成類文件,然後將Jasper Jar發送到我的WEB-INF/lib中,則不會有任何運行時問題。不是? – rk2010

+0

可能不是。但是,正如我所提到的那樣,您正在嵌入JSP實現。無法說出可能發生的其他問題。這可能就是這麼簡單。 –