sap*_*Pro 60 java servlets realpath
在以下代码段中:
ServletContext context = request.getServletContext();
String path = context.getRealPath("/");
Run Code Online (Sandbox Code Playgroud)
是什么/在方法getRealPath()代表什么呢?我应该什么时候使用它?
Bal*_*usC 106
该ServletContext#getRealPath()被intented到Web内容的路径(在服务器的磁盘文件系统上展开的WAR文件夹结构的路径)转换为绝对磁盘文件系统路径.
该"/"代表Web内容根.即它代表web以下项目结构中的文件夹:
YourWebProject
|-- src
| :
|
|-- web
| |-- META-INF
| | `-- MANIFEST.MF
| |-- WEB-INF
| | `-- web.xml
| |-- index.jsp
| `-- login.jsp
:
Run Code Online (Sandbox Code Playgroud)
因此,传递"/"给getRealPath()将返回/web项目的扩展WAR文件的文件夹的绝对磁盘文件系统路径.喜欢的东西/path/to/server/work/folder/some.war/,你应该能够在进一步使用File或FileInputStream.
请注意,大多数初学者似乎没有看到/意识到您实际上可以将整个Web内容路径传递给它并且他们经常使用
String absolutePathToIndexJSP = servletContext.getRealPath("/") + "index.jsp"; // Wrong!
Run Code Online (Sandbox Code Playgroud)
代替
String absolutePathToIndexJSP = servletContext.getRealPath("") + "index.jsp"; // Wronger!
Run Code Online (Sandbox Code Playgroud)
另请注意,即使您可以使用FileOutputStream新文件编写,每当重新部署WAR时,所有更改(例如新文件或编辑文件)都将丢失 ; 原因很简单,所有这些更改都不包含在原始WAR文件中.因此,所有试图在其中保存上传文件的初学者都做错了.
此外,当服务器未配置为将WAR文件扩展到磁盘文件系统时,getRealPath()将始终返回null或完全意外的路径,而是作为虚拟文件系统进入内存.
getRealPath()是不可移植的; 你最好永远不要用它getRealPath()小心使用.实际上没有合理的现实世界用例.如果您真正需要的只是获取getRealPath()Web资源,那么更好地使用它InputStream,无论WAR如何扩展,这都将起作用.所以,如果你想例如一个ServletContext#getResourceAsStream()的InputStream,那么就不能这样做:
String absolutePathToIndexJSP = servletContext.getRealPath("/index.jsp"); // Right!
Run Code Online (Sandbox Code Playgroud)
而是做:
InputStream input = new FileInputStream(servletContext.getRealPath("/index.jsp")); // Wrong!
Run Code Online (Sandbox Code Playgroud)
或者,如果您打算获取所有可用Web资源路径的列表,请index.jsp改用.
InputStream input = servletContext.getResourceAsStream("/index.jsp"); // Right!
Run Code Online (Sandbox Code Playgroud)
您可以ServletContext#getResourcePaths()通过via 获取单个资源URL.ServletContext#getResource()当资源不存在时,这将返回.
Set<String> resourcePaths = servletContext.getResourcePaths("/");
Run Code Online (Sandbox Code Playgroud)
或者,如果您打算保存上传的文件或创建临时文件,请参阅下面的"另请参见"链接.
| 归档时间: |
|
| 查看次数: |
107388 次 |
| 最近记录: |