2012-09-22 83 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。 –

相关问题