我有一些JavaScript文件,一个主HTML文件,一个主要的CSS文件,以及一些导入到主文件中的CSS文件。
据我所知,我可以将静态文件放在两个地方:a)'war'文件夹;或b)'public'文件夹。
放置静态文件的最佳位置在哪里?这两个地点的处理方式不同吗?在这个问题上有“最佳实践”吗?
答案 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();
}
然后它似乎取决于您的要求,例如:
AppClientBundle
界面中通过@Source
注释foo2.png
与img/foo1.png
http://host1/gwtapp1/foo4.png
与http://host1/gwtapp2/foo4.png
http://host1/gwtapp1/foo4.png
与http://host1/foo6.png
以下是人们可以做的事情(可能性)及其对 R。 *的影响:
my.gwtproj.client
下放置了很好的文件夹结构资源(这里)例如 foo1.png
)
@Source("img/foo1.png")...
可以正常使用public
文件夹(在我的情况下是my.gwtproj.public
),但是在Eclipse中创建它作为一个包我不允许这样做(因为 public
是一个保留的Java关键字,但是通过Navigator
视图创建它可以正常工作)
@Source
不起作用(可能是因为它是相对AppClientBundle
文件系统位置的问题)public
文件夹myproj/war
下,例如projdir/war/foo6.png
@Source
http://host1/foo6.png
myproj/war
下,例如projdir/war/img/foo5.png
@Source("img/foo5.png")
不再有用