16

我有一些 JavaScript 文件、一个主 HTML 文件、一个主 CSS 文件和一些导入到主文件中的 CSS 文件。

我知道我可以将静态文件放在两个地方:a)“战争”文件夹;或 b)“公共”文件夹。

放置静态文件的最佳位置在哪里?这两个位置的处理方式不同吗?在这个问题上是否有“最佳实践”?

4

3 回答 3

19

这两个位置的区别在于公用文件夹中的文件由 gwt 编译器复制到“war”文件夹中的“您的模块”文件夹中。这意味着如果您部署“战争”(例如通过谷歌插件到谷歌应用引擎),“公共”文件夹中的文件不在顶层。

例如,如果您在“public”文件夹中有一个名为“mymodule”的 gwt 模块的 index.html,并且您将它部署到 www.example.com,它看起来如下所示,您需要通过以下方式访问它:

www.example.com/mymodule/index.html

如果你在'war'文件夹中有 index.html,你会得到:

www.example.com/index.html

总结。您的登录页面应位于“战争”文件夹中。登陆页面使用的资源文件也可以存储在这里(css、图像)。任何 gwt 模块文件(或代码,如图像)中引用的任何其他资源文件都应存储在与 gwt 模块相关的“公共”文件夹中。

于 2009-10-01T13:50:44.637 回答
7

在 GWT 中工作的新方法是使用 war 文件夹。

但是,如果您的项目是在 GWT 应用程序中使用的可重用小部件库,那么您应该将资源放在公共文件夹中。编译器将确保文件自动包含在生成的包中。

于 2009-10-01T06:44:52.583 回答
4

在我看来,这取决于您的要求,但让我们先从一个口语示例开始......

我发现有关此的文档(应该是 GWT 2.6.0)不正确或至少不完整/令人困惑。如我所见(我不是专家,所以如果我的调查有误,请纠正我!)我正在查看以下示例项目结构

myproj/
  src/my/gwtproj/
     client/
       img/
         foo1.png
       AppClientBundle.java
       foo2.png
     public/
       img/
         foo3.png
       foo4.png
  war/
    img/foo5.png
    foo6.png
  .classpath
  .project

想象一下,我们可能(或可能不需要)在某个AppClientBundle接口(或其他应用程序引用上下文)中引用这些资源:

interfaces AppClientBundle extends ClientBundle {

  @Source("img/foo1.png")
  ImageResource fooImg();
}

然后它似乎取决于您的要求,例如:

  • Ra)这些资源(如图像)在应用程序代码中被引用,例如在我们的AppClientBundle界面中通过@Source注释
  • Rb)这些资源将按文件夹分组,例如foo2.pngvs.img/foo1.png
  • Rc)这些资源应该在某些特定的应用程序 URL 上下文路径之外可用,例如,如果用作小部件库,例如http://host1/gwtapp1/foo4.pngvs.http://host1/gwtapp2/foo4.png
  • Rd)这些资源需要独立于应用程序(例如外部)URL 引用,例如http://host1/gwtapp1/foo4.pngvs.http://host1/foo6.png

这是一个人可以做的(可能性)及其对上述R. * 的影响:

  • P.1)我认为一般推荐)将文件夹结构良好的资源放在my.gwtproj.client(此处例如foo1.png) 下
    • 这种方式@Source("img/foo1.png")...工作正常
    • 在上面的文档中,他们谈到了一些public文件夹(在我的情况下my.gwtproj.public),但是在 Eclipse 中将它创建为一个包我不允许这样做(因为public是保留的 Java 关键字,但通过Navigator视图创建它是有效的)
      • 但是,上述方法@Source不起作用(可能是因为它是相对AppClientBundle文件系统位置的问题)
      • 但是,如果资源应该在应用程序上下文中公开可用,则可能必须通过此public文件夹进行
  • P.2)“未分组”资源直接放在 下myproj/war,例如projdir/war/foo6.png
    • 这样它就可以在注释中使用/找到,例如@Source
    • 并且可以通过例如在应用程序本身之外引用它http://host1/foo6.png
  • P.3)文件夹结构的资源放在 下myproj/war,例如projdir/war/img/foo5.png
    • 与 P.2 相比)@Source("img/foo5.png")将不再起作用
于 2014-03-25T10:30:49.113 回答