我在这个问题上撞了我的头......我有一个(迄今为止相当简单的)谷歌应用程序引擎项目。在运行期间,我想读入一些XML文件(资源文件,而不是可服务的静态文件)进行处理。做了一些研究后,我决定通过servlet上下文读取资源文件(类似于以下内容)。在开发服务器上工作正常。
final InputStream inputStream1 = servletContext.getResourceAsStream(" /" + pathToXmlFile);
问题:不在云端工作。首先,我认为我加载资源的方式是错误的,但我注意到有问题的XML文件似乎根本没有上传。它目前位于:
src / main / webapp / data / stuff.xml和 的src /主/ web应用/ WEB-APP /数据/ stuff.xml
(我不确定放置XML文件的位置,因此我将其复制到两个位置。)部署日志显示了如何跳过文件:
2017-08-10 13:13:42,451 DEBUG root跳过上传[data / stuff.xml]
2017-08-10 13:13:42,461 DEBUG root跳过上传[WEB-INF / data / stuff.xml]
我已经尝试了许多事情,但没有成功,以便部署文件。我试过的事情:
仅供参考,appengine-web.xml的当前内容
<resource-files>
<include path="/data/*.xml" />
<include path="data/*.xml" />
</resource-files>
(不确定是否需要斜杠......)
请注意,部署确实适用于已更改/新的.class文件,因此我对Java类的更改上传得很好。不知何故,部署机制还没有意识到还必须上传XML文件。
仅供参考 - Windows,Eclipse 4.7,Java 8,云工具1.2.0.201706082053
任何帮助都表示赞赏,特别是如果有人知道部署机制如何决定部署哪些文件!
答案 0 :(得分:1)
试试这个:
<resource-files>
<include path="/data/**.xml" />
</resource-files>
这应该包括data/
及其子目录中的所有xml文件。
他们documentation on include and exclude syntax,因为我确定你知道,非常吝啬。我很确定你想要那个双星号,而且更确定你想要领先的斜杠。我现在正试图在其上找到更多信息,如果我这样做,我会发布一个链接。
答案 1 :(得分:0)
感谢Brendan,**做了伎俩。仅供参考,设置如下:
<resource-files>
<include path="/data/**.xml" />
</resource-files>
<static-files>
<exclude path="/data/**.xml" />
</static-files>
使用单个*对于&#34;任何XML文件都不够好,它必须是**。作为资源文件条目的副作用,XML文件现在突然也可以作为静态文件使用,可通过浏览器访问。因此静态文件中的排除部分可以防止暴露这种情况。不确定这是否过于优雅或最简单/最干净的方式,但它的工作原理......
仅供参考,&#34;数据&#34;目录直接包含在&#34; webapp&#34;下面,并且访问资源的代码是:servletContext.getResourceAsStream(&#34; /data/stuff.xml");
注意我还必须手动&#34;触摸&#34; XML文件,以便上传。
再次感谢。