我把我的头撞到了墙上.我有一个(到目前为止相当简单的) google应用引擎项目。在运行时,我希望读取一些XML文件(资源文件,而不是可服务的-静态文件)进行处理。在做了一些研究之后,我决定通过servlet上下文读取资源文件(类似于下面的内容)。在dev服务器上工作得很好。
InputStream inputStream1 = servletContext.getResourceAsStream("/“+ pathToXmlFile);
问题:在云中不起作用。首先,我认为加载资源的方式是错误的,但我注意到所讨论的XML文件似乎根本没有上传。它目前设在这里:
src/main/webapp/data/stuff.xml和src/main/webapp/webapp/data/stuff.xml
(我不知道在哪里放置XML文件,所以我将它复制到两个位置。)部署日志显示了如何跳过文件:
2017-08-10 13:13:42,451调试根跳过上传数据/stuff.xml
2017-08-10 13:13:42,461调试根跳上传WEB-INF/data/stuff.xml
我尝试了很多事情,但都没有成功,我试着部署了这个文件。我试过的事情:
FYI,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
任何帮助都值得赞赏,尤其是如果有人知道部署机制是如何决定部署哪些文件的!
发布于 2017-08-10 13:47:29
试试这个:
<resource-files>
<include path="/data/**.xml" />
</resource-files>这应该包括data/及其子目录中的所有xml文件。
他们的包含和排除语法的文档,我相信你知道,是相当少。我很肯定你想要双星号,更肯定的是你想要前面的斜杠。我正试图找到更多的信息,现在,如果我这样做,将张贴一个链接。
发布于 2017-08-10 15:17:40
谢谢布兰登,**成功了。FYI,设置如下:
<resource-files>
<include path="/data/**.xml" />
</resource-files>
<static-files>
<exclude path="/data/**.xml" />
</static-files>仅仅使用一个*并不足以满足“任何XML文件”的需要,它必须是**。作为资源文件条目的副作用,XML文件现在突然也可以作为静态文件使用,可以通过浏览器访问。因此,静态文件中的排除部分防止了这种情况的暴露。不知道这样做是否过于优雅或最简单/最干净的方法,但它有效.
FYI,“数据”目录直接包含在"webapp“下面,要访问资源,代码是: servletContext.getResourceAsStream("/data/stuff.xml");。
注意,为了让XML文件上传,我还必须手动“触摸”XML文件。
再次感谢。
https://stackoverflow.com/questions/45615204
复制相似问题