在Portlet中保存并加载操作--jsp文件找不到该文件

时间:2013-06-04 08:16:24

标签: java jsp liferay portlet

我在Liferay portlet中生成.svg文件,将它们保存在位于服务器(JBoss AS)上的svg文件夹中。生成这些文件并将其保存在.java类中,如下所示:

private void saveSVG(Document doc, String fileName) {
    // save svg to file
    try {
        File file = new File("svg/" + fileName + ".svg"); // make file
        PrintWriter writer;
        writer = new PrintWriter(new FileOutputStream(file)); // write and
                                                                // save file
        DOMUtilities.writeDocument(doc, writer);
        writer.flush();
        writer.close();

        System.out.println("File path: " + file.getPath());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

该文件保存在server / bin / svg目录中。但是当我尝试访问我的.jsp页面中的文件时,它似乎无法找到该文件(它可能在另一个目录中查找)。如何判断所需文件的位置?我可以使用绝对路径,将其存储在某处并将其传递给.jsp页面,但这似乎不是非常优雅的解决方案。

<object data="svg/topBar.svg" type="image/svg+xml"></object> 

或者如何将文件保存到.jsp页面使用上层代码找到它的相对路径?

感谢您的帮助!

编辑:“topBar.svg”显然是我在这个例子中使用的文件名

1 个答案:

答案 0 :(得分:2)

问题是在Java代码中使用新的File(),在启动JBoss时,在相对于命令行位置的位置创建文件,而JSP中的路径是相对于webapp上下文的

不确定,但我认为你可以试试:

File file = new File(getPortletContext().getRealPath("svg/topBar.svg"))