我正在使用jsp和servlets创建一个Web应用程序。但我面临两个问题,我没有想法如何删除:
问题1:我在WEB-INF文件夹中创建新文件夹。但我想要的是而不是提供完整路径。我只提供相关路径,如:
File tempfilesstore = new File("C:\\Users\\admin\\Desktop\\SharedCrpto1\\web\\RetrievedFiles\\"+fileid+"-"+personname);
if(!tempfilesstore.exists())
tempfilesstore.mkdirs();
可以避免这个完整路径,因为只需要从应用程序的Web文件夹路径。
问题2:我通过对浏览器上客户端浏览的原始图像执行某些操作,在此文件夹中保留图像。
现在,当我看到文件夹中的图像然后它出现了他们但是如果我试图在浏览器中看到相同的图像它不显示图像。当我刷新我的页面3-4次时有时会显示和有时候通过前往指定的位置手动打开它。可能是什么原因?请帮忙。
以下是我在浏览器上尝试获取图片的方法:
<img src="RetrievedFiles/<%=path%>/<%=sharedfilee%>" alt="Image Preview Not Availablee" width="300" height="300" />
在这里,
String path=presentfileid+"-"+personname;
String sharedfilee=rs.getString("FILE_NAME");
答案 0 :(得分:1)
首先,从JEE的角度来看,WEB-INF文件夹中的所有文件都不应被除服务器之外的任何人访问。这意味着您的Web浏览器不会呈现此目录中的图像,CSS文件,javascript文件等。您的JEE服务器将阻止这种情况发生。 因此,为了从Web浏览器访问文件,您需要将它们放在WEB-INF文件夹之外(例如,在&#34; images&#34;文件夹中)。
对于您的第一个问题:是的,您可以使用相对路径来使用classLoader实例化文件。
this.getClass().getClassLoader().getResource("resourcePath")
或
this.getClass().getClassLoader().getResourceAsStream("resourcePath")
取决于您的需求。第一个返回URI(http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)),而第二个返回一个可以与FileInputStream一起使用的InputStream(http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String))。
ressources位于classes文件夹中,路径相对于您从中获取资源的类。例如,您可以使用&#34; /myImage.png"作为在根级别获取图像的路径。
将所有资源文件放在&#34;类&#34;文件夹(如果你愿意,在子文件夹中)是一个很好的架构设计。
对于您的第二个问题,您主要有两个解决方案:
如果图像是在没有任何变换的情况下渲染的,则将其放在WEB-INF之外的文件夹中(请参阅我的评论的开头),它将从外部可见。在您的JSP中,您可以像这样访问它:
request.getContextPath()+&#34; /&#34; + sharedfile
如果图像需要转换,请使用servlet
我希望能帮助你。
此致 Alexandre FILLATRE