我在哪里为GWT应用程序放置静态文件? war文件夹或公用文件夹?

时间:2009-10-01 06:14:12

标签: gwt web-applications directory-structure

我有一些JavaScript文件,一个主HTML文件,一个主要的CSS文件,以及一些导入到主文件中的CSS文件。

据我所知,我可以将静态文件放在两个地方:a)'war'文件夹;或b)'public'文件夹。

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

3 个答案:

答案 0 :(得分:18)

两个位置之间的区别在于公共文件夹中的文件由gwt编译器复制到'war'文件夹中的'your module'文件夹。这意味着如果您将“war”部署(例如通过google插件到google appengine),则“public”文件夹中的文件不在顶层。

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

www.example.com/mymodule/index.html

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

www.example.com/index.html

综述。您的目标网页应位于“war”文件夹中。着陆页使用的资源文件也可以存储在此处(css,images)。任何gwt模块文件(或代码,如图像)中引用的任何其他资源文件都应存储在与gwt模块相关的“public”文件夹中。

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

正如我所看到的,这取决于你的要求,但让我们首先从一个说话的例子开始......

我发现documentation(应该是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();
}

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

  • R.a)这些资源(如图片)在应用程序代码中被引用,例如在我们的AppClientBundle界面中通过@Source注释
  • R.b)这些资源将按文件夹分组,例如foo2.pngimg/foo1.png
  • R.c)这些资源应该在某些特定应用程序URL上下文路径之外可用,例如:如果用作小部件库,例如http://host1/gwtapp1/foo4.pnghttp://host1/gwtapp2/foo4.png
  • R.d)这些资源需要独立于应用程序(例如,外部)URL引用,例如: http://host1/gwtapp1/foo4.pnghttp://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")不再有用