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

时间:2017-04-18 19:57:32

标签: java path upload struts2

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

ServletActionContext.getServletContext().getRealPath("\\WebContent\\resources\\img\\");

我有这条道路:

  

C:\用户\基利安\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ SiteWebAdministrable \的WebContent \资源\ imgicone.jpg

为什么确切的源路径?

因为我需要为管理网站上传和保存图像以控制背景而没有实际路径我无法在资源路径中保存图像... 所以我在数据库中保存了名称和扩展名的路径(没问题),我需要将图像保存在资源目录中(图像问题...)

是的,有人能帮帮我吗?我忘记了什么吗?

这个问题的答案是什么?

How do you get the project path in Struts 2?

1 个答案:

答案 0 :(得分:0)

servletContext.getServletContext().getRealPath("/resources/img/name_of_image.png")

因此,将“/”传递给getRealPath()将返回项目展开的WAR文件的/ web文件夹的绝对磁盘文件系统路径。像/path/to/server/work/folder/demo.war/这样你应该能够在File或FileInputStream中进一步使用。

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

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

而不是

String absolutePathToIndexJSP = servletContext.getRealPath("/demo.png");

getRealPath()是不可移植的;你最好永远不要用它

仔细使用getRealPath()。

如果实际需要的只是获取Web资源的InputStream,那么最好使用ServletContext#getResourceAsStream(),无论WAR如何扩展,这都会有效。所以,如果您想要一个index.jsp的InputStream,那么不要这样做:

InputStream input = new FileInputStream(servletContext.getRealPath("/demo.png")); // Wrong!

但请做:

InputStream input = servletContext.getResourceAsStream("/demo.png"); // Right!

或者,如果您打算获取所有可用Web资源路径的列表,请改用ServletContext#getResourcePaths()。

Set<String> resourcePaths = servletContext.getResourcePaths("/");