我使用Web片段(servlet 3规范),因此可以通过加载WAR META-INF/resources/access.xml库中/WEB- INF/lib/的文件,例如ServletContext.getResourceAsStream("access.xml")。
META-INF/resources/access.xml
/WEB- INF/lib/
ServletContext.getResourceAsStream("access.xml")
不能这样做ServletContext.getRealPath("access.xml")(=> null)。
ServletContext.getRealPath("access.xml")
null
规范指出:
该getRealPath方法接受一个String参数,并返回String路径对应的本地文件系统上文件的表示形式。META- INF/resources仅当在调用时容器已将其从其包含的JAR文件中解压缩时,才必须考虑JAR文件目录中的资源getRealPath() ,并且在这种情况下,必须返回解压缩的位置。
getRealPath
String
META- INF/resources
getRealPath()
我的容器(Tomcat)没有打开jar的包装,这似乎是问题所在?Tomcat如何解压缩jar。包装WAR时,应该打开包装吗?
是的,getResourcesAsStream()始终有效。但是getRealPath()不是。
getResourcesAsStream()
答:不要尝试getRealPath()与Web片段一起使用。