我有一个GWT需要访问一些静态资源。我不想将这些资源放在实际的/ src/main/webapp目录中(注意:使用Maven和相应的布局),因为它们不是应用程序的一部分,而是数据的一部分。添加外部资源,GWT开发模式服务器(码头)
我的问题不是如何让这些资源在部署时应用程序的访问;这应该很容易通过Tomcat配置来完成。问题是如何让我的应用程序在开发过程中访问某些测试数据。我在我的GWT应用程序树之外的目录中有一些测试静态文件,并且想要配置GWT的开发模式Jetty服务器来访问这些资源。也就是说,我希望能够说mvn gwt:运行(或者在Eclipse中以开发模式运行或调试应用程序),并让服务器为这些静态资源提供服务。
我知道(和使用)的开发模式-noserver选项。但是,由于我正在修改服务器端代码以及客户端代码,因此每次服务器代码更改时重新部署服务器都是不切实际的。
到目前为止,我一直在想是建立在我的WEB-INF目录下的码头-web.xml文件,并添加新的上下文,这样服务器将成为我的资源。这里是我的失败码头-web.xml中尝试:
<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler">
<Set name="contextPath">/static_resources</Set>
<Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set>
<Set name="handler">
<New class="org.mortbay.jetty.handler.ResourceHandler">
<Set name="cacheControl">max-age=3600,public</Set>
</New>
</Set>
</Configure>
如果我把在码头-web.xml中,然后当我开始开发者模式,码头确实为我的外部资源,但不为我的GWT应用程序。
在另一方面,如果我这样做...
<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler">
<New id="newHandler" class="org.mortbay.jetty.handler.ContextHandler" >
<Set name="contextPath">/static_resources</Set>
<Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set>
<Set name="handler">
<New class="org.mortbay.jetty.handler.ResourceHandler">
<Set name="cacheControl">max-age=3600,public</Set>
</New>
</Set>
</New>
<Get id="server" name="server">
<Call name="setHandler">
<Arg><Ref id="newHandler" /></Arg>
</Call>
</Get>
<Ref id="newHandler">
<Set name="server"><Ref id="server" /></Set>
</Ref>
</Configure>
...码头既不符合我的静态的东西也不是我的GWT应用程序。
有什么建议吗?我究竟做错了什么?
(注:GWT开发模式使用码头的版本6或6.something],并将其设置编程,所以据我所看到的,没有其他的码头配置文件被读入。)
非常感谢!
FWIW,当我需要自定义服务器时,我不打扰托管模式码头实例,但设置了不同的服务器并使用-noserver防止码头启动。 –
对,我有时会使用该选项。但是,这意味着每次服务器代码更改时,在其他服务器中打包和部署.war,不是吗?然后在另一台服务器上设置调试呢?我的意思是,我可以想象它是可能的,并且有办法使它自动化,但它似乎不是最直接的选择。 – Andrew
我那里的一般方法(因为它实际上并没有解决问题的意见)是运行其他服务器我的ide。使用'mvn war:exploded'将所有重要的位复制到右侧,同时仍然允许我正常调试。主要区别在于有两个调试会话正在进行,两个按钮可以单击以启动事件而不是一个,但我需要重新启动gwt dev模式而不是服务器。 –