向GWT开发模式服务器(Jetty)添加外部资源
我有一个GWT需要访问一些静态资源。我不想将这些资源放在实际的/src/main/webapp目录中(注意:使用Maven和相应的布局),因为它们不是应用程序的一部分,而是数据的一部分 我的问题不是如何在部署时让应用程序访问这些资源;通过Tomcat配置,这应该很容易做到。问题在于如何在开发过程中让我的应用程序访问一些测试数据。我在GWT应用程序树之外的目录中有一些测试静态文件,我想配置GWT的开发模式Jetty服务器来访问这些资源。也就是说,我希望能够说mvn gwt:run(或者在Eclipse的开发模式下运行或调试应用程序),并让服务器为这些静态资源提供服务 我知道(并使用)dev mode-noserver选项。但是,由于我对服务器端代码以及客户端代码进行了大量修改,因此每次服务器代码更改时重新部署服务器是不实际的 到目前为止,我一直在尝试在我的web-INF目录中创建一个jetty-web.xml文件,并添加一个新的上下文,以便服务器能够为我的资源提供服务。以下是我失败的jetty-web.xml尝试:向GWT开发模式服务器(Jetty)添加外部资源,gwt,servlets,jetty,Gwt,Servlets,Jetty,我有一个GWT需要访问一些静态资源。我不想将这些资源放在实际的/src/main/webapp目录中(注意:使用Maven和相应的布局),因为它们不是应用程序的一部分,而是数据的一部分 我的问题不是如何在部署时让应用程序访问这些资源;通过Tomcat配置,这应该很容易做到。问题在于如何在开发过程中让我的应用程序访问一些测试数据。我在GWT应用程序树之外的目录中有一些测试静态文件,我想配置GWT的开发模式Jetty服务器来访问这些资源。也就是说,我希望能够说mvn gwt:run(或者在Eclip
<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>
/静态资源
/real/filesystem/path/to/static/resources/
最大年龄=3600岁,公共
如果我把它放在jetty-web.xml中,那么当我启动dev模式时,jetty确实服务于我的外部资源,但不服务于我的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>
/静态资源
/real/filesystem/path/to/static/resources/
最大年龄=3600岁,公共
…Jetty既不提供我的静态内容,也不提供我的GWT应用程序
有什么建议吗?我做错了什么
(注意:GWTDev模式使用Jetty的版本6[或6.something],并以编程方式进行设置,就我所见,没有读取其他Jetty配置文件。)
非常感谢 我喜欢使用的方法是编写一个简单的Servlet,它可以流式处理任何文件,类似于:,并将它在my web.xml中映射到特定的URL模式 然后,我可以通过我的一个配置文件轻松地配置静态文件的基本目录。我也可以做任意的事情,比如把几个目录混合在一起,或者从数据库中获取文件内容 我更喜欢这种方法,因为它适用于任何环境中的所有servlet容器。我的工作方法:
<?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>
java:jboss/datasources/sampleDS
jdbc:oracle:thin:@127.0.0.1:1521:ORCL
用户
通过
[jetty-naming-6.1.12.jar][1]
和[jetty-plus-6.1.12.jar][2]
并将它们放在“WEB-INF\lib”下重新启动eclipse并再次运行应该可以做到这一点。FWIW,当我需要自定义服务器时,我不需要使用托管模式jetty实例,而是设置一个不同的服务器并使用-noserver来阻止jetty启动。是的,我有时会使用该选项。但这意味着每次服务器代码更改时都要在另一台服务器中打包和部署.war,不是吗?然后在另一台服务器上设置调试?我的意思是,我可以想象这是可能的,并且有一些方法可以实现自动化,但这似乎不是最直接的选择。我的一般方法(评论,因为它实际上没有解决问题)是在我的ide之外运行另一台服务器。使用
mvnwar:exploded
将所有重要的位复制到右目录,同时仍允许我正常调试。主要的区别是,有两个调试会话正在进行,两个按钮可以单击启动,而不是一个按钮,尽管我需要重新启动gwt dev模式而不是服务器。谢谢!如果我不能通过码头工作,我一定会试试。我认为像您这样的方法或者一些基于maven的解决方案可能更干净,因为它不依赖于GWT内部的细节(比如servlet容器开发模式使用的)。我想,向GWT请求一个补丁或特性,以获得一种更干净的方式来配置开发模式服务器也可能是正确的。非常感谢!我会很快测试这个(希望能将答案标记为正确的)-1该xml没有显示如何添加外部文件夹作为静态文件的资源库,只是一个数据源。