Java 在Portlet中保存和加载操作-jsp文件找不到该文件
我正在Liferay portlet中生成.svg文件,并将其保存在服务器(JBoss AS)上的svg文件夹中。这些文件生成并保存在.java类中,如下所示: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
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并将其直接写入输出流。