2012-09-22 120 views
1

我想在自定義Web服務器上部署GWT客戶端應用程序。我使用GWT預壓縮連接這樣在我.gwt.xml文件:在嵌入式Web服務器上壓縮GWT應用程序部署

<inherits name="com.google.gwt.precompress.Precompress"/>

<set-configuration-property name="precompress.leave.originals" value="false" />

<add-linker name="xsiframe" />

而且在我的html文件,我加載與引用的JavaScript到nocache.js.gz:

<script type="text/javascript" src="app/app.nocache.js.gz"></script>

共按照預期,mpiler會生成壓縮的javascript文件。但是,當我運行該應用程序時,該應用程序正在從Web服務器請求* .cache.js文件,而不是我想象的* .cache.js.gz文件。

我正在使用不處理壓縮的自定義Web服務器,所以我想知道是否有一種方法來配置GWT編譯器來生成請求* .cache.js.gz文件的代碼,而不是* .cache.js文件?我似乎無法找到任何文檔,但如果我錯過了文檔中的某些內容,我會欣賞一個指針。

+0

我結束了運行下面的命令post-gwt compile,因爲我找不到一個像樣的解決方案:find app -name \ *。js -exec perl -pi -e「s/cache.js/cache.js.gz/g;」 {} \; -exec gzip -f {} \; – PKK

+0

您不應該在默認情況下將其替換,因爲舊版瀏覽器無法處理預壓縮資源。如果你只支持現代瀏覽器,它不會有什麼不同。 –

+0

謝謝Ümit。我知道舊的瀏覽器無法處理它。我希望GWT檢查用戶代理,然後在可能的情況下實際請求.gz。但是,你看到我的方法與IE8 +,FF4 +,Safari 5 +的任何問題? – PKK

回答

0

PrecompressLinker將生成.gz文件。
但是,並非所有瀏覽器都支持預壓縮資源,因此默認情況下不會加載它們。

您必須配置您的網絡服務器/後端服務器,以便它檢查是否有預壓縮資源可用,以及客戶端是否支持壓縮,然後重寫請求以檢索* .gz文件而不是非壓縮文件。

0

如果有配置GWT編譯器生成請求代碼* .cache.js.gz文件的方式,而不是

讓我們做一個思想實驗。比方說,我們可以讓GWT從您的自定義服務器請求一個gzip文件。

誰將解壓縮它? GWT瀏覽器客戶端?不,你將不得不編寫自己的瀏覽器。 GWT客戶端中的所有Java都被翻譯/編譯成Javascript。爲了安全起見,瀏覽器上的Javascript無法調用瀏覽器的主機JVM來解壓縮它。

誰將解壓縮它?服務器?然後你的自定義服務器必須處理它。您需要擴展自定義服務器的功能。

對不起,我的道歉,但我希望你認真思考Javascript客戶端和你的自定義服務器之間的數據交換。有人必須在某處解壓縮文件 - 我確信它不會是集線器或路由器或傳輸電纜/媒體。

我建議人們在沉迷於GWT之前掌握一些JSP/JEE編程的熟練程度。使用JSP生成瀏覽器要顯示的javascript和HTML。當你獲得了JSP生成的內容的合理經驗時,你會傾向於理解GWT客戶機 - 服務器的約束,優點和要求。如果不是JSP,那麼至少PHP。

+0

我認爲你誤解了海報的問題。他並沒有要求通過JavaScript/GWT解壓縮/壓縮內容,但是如何自動加載預壓縮的資源。現代瀏覽器支持服務器端壓縮。 GWT中有一個[PrecompressLinker](http://code.google.com/p/google-web-toolkit/wiki/PrecompressLinker),它除了生成未壓縮的資源或預壓縮的資源之外,還生成了它。但是GWT不會自動獲取它們,因爲現在的瀏覽器只支持壓縮。 –

+0

@Ümit你點。 – PKK

+0

@BlesedGeek所有現代瀏覽器都支持透明地自動解壓縮gzip編碼的內容。無需編寫您自己的瀏覽器或訪問JVM。 –

相關問題