2012-01-24 94 views
5

我有一个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],并将其设置编程,所以据我所看到的,没有其他的码头配置文件被读入。)

非常感谢!

+1

FWIW,当我需要自定义服务器时,我不打扰托管模式码头实例,但设置了不同的服务器并使用-noserver防止码头启动。 –

+0

对,我有时会使用该选项。但是,这意味着每次服务器代码更改时,在其他服务器中打包和部署.war,不是吗?然后在另一台服务器上设置调试呢?我的意思是,我可以想象它是可能的,并且有办法使它自动化,但它似乎不是最直接的选择。 – Andrew

+0

我那里的一般方法(因为它实际上并没有解决问题的意见)是运行其他服务器我的ide。使用'mvn war:exploded'将所有重要的位复制到右侧,同时仍然允许我正常调试。主要区别在于有两个调试会话正在进行,两个按钮可以单击以启动事件而不是一个,但我需要重新启动gwt dev模式而不是服务器。 –

回答

0

我喜欢使用的方法是编写一个简单的Servlet,它可以对任何文件进行流式传输,类似于:http://www.exampledepot.com/egs/javax.servlet/GetImage.html,并将其映射到我的web.xml中以获得特定的URL模式。

然后,我可以很容易地使基本目录通过我的配置文件配置一个静态文件。我还可以做任意的东西一样几个目录混合在一起,或从数据库获取文件内容,...

我更喜欢这种做法,因为它在任何环境中所有的servlet容器的作品。

-1

我的工作之一:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 

<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 
     <New id="sampleDS" class="org.mortbay.jetty.plus.naming.Resource">    
      <Arg>java:jboss/datasources/sampleDS</Arg> 
      <Arg> 
       <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
       <Set name="URL">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</Set>     
       <Set name="User">user</Set> 
       <Set name="Password">pass</Set> 
       </New> 
      </Arg> 
     </New> 
</Configure> 
  1. 把它放在WEB-INF
  2. 下载[jetty-naming-6.1.12.jar][1][jetty-plus-6.1.12.jar][2],把他们在'WEB-INF \ lib中”

重新启动Eclipse,然后再次运行应该做的伎俩。

+0

非常感谢!我会尽快对此进行测试(并希望将答案标记为正确)! – Andrew

+1

-1 xml不显示如何将外部文件夹添加为静态文件的资源库,只是数据源。 – n3k0