我有一个网络应用程序,我将一些pdf文件放在资源文件夹中,当用户点击下载按钮时,这些文件会呈现给用户,这就是我读取文件的方式
ClassLoader classloader = Thread.currentThread().getContextLoader();
File f = new File(classloader.getResource("pdf/report.pdf").getFile);
然后我在响应中渲染文件,当我在eclipse中运行它时,这个工作正常。
但是一旦我将它打包成war文件并使用apache tomcat manager进行部署,我再也无法访问该文件,它显示500错误,指定的访问文件无法访问。
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您需要获取资源流并提供来自该资源的响应,而不是来自文件。类加载器具有函数getResourceAsStream,它应该与您传递给getResource的相同参数一起使用
ClassLoader classloader = Thread.currentThread().getContextLoader();
InputStream stream = classloader.getResourceAsStream("pdf/report.pdf")
// Copy resource stream to servlet response e.g. using Apache IOUTils
IOUtils.copy(stream, <servelet response stream>)
// Don't forget to close stream
Eclipse最喜欢的是解析本地文件路径,这可能无法以相同的方式在Web应用程序环境中运行。
答案 1 :(得分:-1)
打开您的war文件并手动检查&#34; / WEB-INF / classes /&#34;文件夹是否存在于此文件夹中。