Java 如何在Struts 2中获得实际的源路径?

Java 如何在Struts 2中获得实际的源路径?,java,path,upload,struts2,Java,Path,Upload,Struts2,当我尝试获取上下文路径时,Struts 2有一个小问题: ServletActionContext.getServletContext().getRealPath("\\WebContent\\resources\\img\\"); 我找到了这条路: C:\Users\killian\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SiteWebAdministrable\WebContent\res

当我尝试获取上下文路径时,Struts 2有一个小问题:

ServletActionContext.getServletContext().getRealPath("\\WebContent\\resources\\img\\");
我找到了这条路:

C:\Users\killian\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SiteWebAdministrable\WebContent\resources\imgicone.jpg

为什么是精确的源路径

因为我需要上传和保存一个管理员网站的图像来控制背景,如果没有实际的路径,我无法将图像保存在资源路径中。。。 因此,我将带有名称和扩展名的路径保存在数据库中(没有问题),并且我需要将图像保存在资源目录中(图像问题…)

有人能帮我吗?我忘了什么吗

这个问题就是答案

因此,将“/”传递给getRealPath()将返回项目的扩展WAR文件的/web文件夹的绝对磁盘文件系统路径。类似于/path/to/server/work/folder/demo.war/的内容,您应该能够在文件或FileInputStream中进一步使用它

请注意,大多数初学者似乎没有看到/意识到您实际上可以将整个web内容路径传递给它,并且他们经常使用

String absolutePathToIndexJSP = servletContext.getRealPath("/") + "demo.png";
而不是

String absolutePathToIndexJSP = servletContext.getRealPath("/demo.png");
getRealPath()不可移植;你最好不要用它

小心使用getRealPath()。

如果您真正需要的只是获取web资源的InputStream,那么最好使用ServletContext#getResourceAsStream(),无论战争以何种方式展开,这都会起作用。因此,例如,如果您想要index.jsp的InputStream,则不要执行以下操作:

InputStream input = new FileInputStream(servletContext.getRealPath("/demo.png")); // Wrong!
但是,你应该:

InputStream input = servletContext.getResourceAsStream("/demo.png"); // Right!
或者,如果您打算获取所有可用web资源路径的列表,请改用ServletContext#GetResourcePath()

Set resourcepath=servletContext.getresourcepath(“/”);

您的路径有什么问题?我搜索了一个路径,如C:\Users\killian\workspace\SiteWebAdministrable\WebContent\resources\img\icone.jpg,将图像保存在项目目录中
InputStream input = servletContext.getResourceAsStream("/demo.png"); // Right!
Set<String> resourcePaths = servletContext.getResourcePaths("/");