Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Portlet中保存和加载操作-jsp文件找不到该文件_Java_Jsp_Liferay_Portlet - Fatal编程技术网

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

Java 在Portlet中保存和加载操作-jsp文件找不到该文件,java,jsp,liferay,portlet,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 Pr

我正在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”显然是我在本例中使用的文件名

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

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


File File=new File(getPortletContext().getRealPath(“svg/topBar.svg”))

小心:如果您将文件保存在可直接从web读取的位置,您将面临多个问题:当您将更新部署到应用程序时,很可能会丢失该应用程序中存储的文件。它不能在整个应用服务器中移植(可能会与下一个版本中断)。此外,如果您的webapp目录可写入web应用程序,并且您没有特别小心,那么您就可以打开自己进行远程代码执行,例如,有人上载jsp文件并访问它执行的服务器端。@OlafKock这些文件应保存在portlet所在的a.war目录中(在服务器上)并且在创建之后只使用一次-我不认为这是问题所在,但我不是这方面的专家…Portlet的更好解决方案是使用ServerSourceUrl提供SVG并将其直接写入输出流。