servletcontext.getRealPath("/") 是什么意思以及何时应该使用它?
简介
;
在 Java servlet 应用程序中, ServletContext#getRealPath() 方法用于将相对 Web 内容路径转换为绝对磁盘文件系统路径。指定的路径可以是 Web 内容中的文件或目录。但是,应谨慎使用此方法,并且在现代 Java EE 开发中通常不鼓励使用此方法。
getRealPath("/")
的使用
/ getRealPath("/") 中表示网页内容目录的根目录。它是包含 Web 应用程序的 web.xml 文件的目录的绝对文件系统路径。例如,在以下项目结构中:
YourWebProject/
src/
:
web/
META-INF/
WEB-INF/
index.jsp
login.jsp
:
如果执行 getRealPath("/"),它将返回 Web 目录的文件系统路径,例如 /path/to/server/work /folder/some.war/web.
警告和限制
虽然 getRealPath() 在某些情况下很有用,但它有一些限制,并且通常不鼓励这样做,原因如下:
-
写入不是persist: 对使用 getRealPath() 写入的文件所做的更改将在重新部署 WAR 期间丢失
-
扩展依赖: getRealPath() 的可靠性取决于服务器扩展 WAR 文件的配置。如果 WAR 未扩展到磁盘文件系统,getRealPath() 可能会返回不正确或空路径。
-
无可移植用例: 通常有更便携、更可靠的替代方案来使用 getRealPath ().
替代方案getRealPath()
不要使用 getRealPath(),请考虑以下替代方案:
- 使用 ServletContext#getResourceAsStream() 获取 Web 中资源的 InputStream content.
- 使用 ServletContext#getResourcePaths() 检索可用的列表资源路径。
- 使用 ServletContext#getResource() 获取资源的 URL。
- 有关文件上传或临时文件创建,请参阅下面的“另请参阅”链接。
另请参阅
- [getResourceAsStream() 与 FileInputStream](https://stackoverflow.com/questions/4212943/resource-as-inputstream-in-java-best-practice)
- [推荐方法将上传的文件保存在 servlet 中application](https://stackoverflow.com/questions/5797716/recommulated-way-to-save-uploaded-files-in-a-servlet-application)
- [在重新部署时保留数据的简单方法Java EE 7 网络应用程序](https://stackoverflow.com/questions/11736935/simple-ways-to-keep-data-on-redeployment-of-java-ee-7-web-application)
以上是`ServletContext.getRealPath('/')` 有什么作用,为什么我应该避免在现代 Java EE 应用程序中使用它?的详细内容。更多信息请关注PHP中文网其他相关文章!