我正在编写基于Spring MVC的Web应用程序(使用 war 文件进行部署)并尝试获取
的值 String rootDir = request.getSession().getServletContext().getRealPath("/");
我期待得到
"C:\user\projects\MyApp"
但实际值是
"C:\user\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyApp\"
我尝试在Eclipse中更改源文件夹输出位置,但之后我的所有jsp文件,web.xml和文件夹\ WEB-INF都消失了。我该如何恢复它们?
我之所以这么说是因为我希望将上传的图片保存在&#34; MyApp \ webapp \ WEB-INF \ resources \ images \&#34; 文件夹中。< / p>
答案 0 :(得分:0)
为什么您希望路径为"C:\user\projects\MyApp"
?
您正在使用Eclipse运行您的应用程序,Eclipse正在将其部署到C:\user\projects\.metadata\.plugins\org.eclipse.wst.server.core
,而不是从项目源文件夹运行它,这就是您从getRealPath()调用获得"C:\user\projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyApp\"
的原因。
来自ServletContext#getRealPath()
获取与给定虚拟路径对应的真实路径。对于 例如,如果path等于/index.html,则此方法将返回 请求的服务器文件系统上的绝对文件路径 形式为http://://index.html 映射,其中对应于此的上下文路径 ServletContext中。强>
返回的真实路径将采用适合计算机的形式 以及运行servlet容器的操作系统, 包括正确的路径分隔符。
JAR文件的/ META-INF / resources目录中的资源 必须考虑捆绑在应用程序的/ WEB-INF / lib目录中 仅当容器已从其包含的JAR中解压缩它们时 文件,在这种情况下,解压缩位置的路径必须是 返回。
如果servlet容器无法返回null,则此方法返回null 将给定的虚拟路径转换为真实路径。