2009-08-09 44 views
1

资源文件我想从一个servlet访问的资源文件,但得到HTTP错误500 - 访问被拒绝拒绝访问,从Java Servlet的

File file = new File("//warChildFolder//myFile.txt"); 
InputStream is = new FileInputStream(file); // <--error on this line 

我对谷歌 - 应用程序引擎。

任何帮助表示赞赏!

回答

3

谷歌App Engine的文档谈“白名单”的文件。这是在玩吗?

我也想知道这个问题:

File file = new File("//warChildFolder//myFile.txt"); 

不领先斜线使这是一个绝对路径?

我想尝试这样的:

File file = new File("WEB-INF/warChildFolder/myFile.txt"); 

使相对WAR根的路径并明确说明WEB-INF。

+0

不知道如何白名单文件。在我的情况下,warChildFolder是WAR文件夹的子项(不在WEB-INF中) – JohnIdol 2009-08-09 14:34:26

+0

我认为白名单是针对类而不是文件,你有参考吗? – 2009-08-09 14:52:19

+0

是的 - 有一个看看,文档谈论关于白名单没有提及文件的类? – JohnIdol 2009-08-09 14:53:26

1

请问如果使用单一的路径分隔符的工作?

(更新使用相对路径):

File file = new File("warChildFolder/myFile.txt"); 

你一定要逃逸字符串的字符“\”,所以用“\”,而是一个“/”是所有需要。

更新:这可能是正在处理的路径并不如你期望的那样,你可以尝试登录该文件的绝对路径相同(与file.getAbsolutePath())进行检查。

另一件事是检查该进程已读文件夹/文件的权限。如果你不在Windows上,这可能是一个问题。

+0

尝试,但得到相同的错误 – JohnIdol 2009-08-09 13:34:54

+0

感谢您的帮助 - 我也从fiel.getAbsolutePath()获取访问拒绝 - 如果路径错误,我希望得到一个文件找不到错误 – JohnIdol 2009-08-09 14:25:42

+0

对我来说,它听起来像一个权限那么问题,你有没有检查他们,我最后一段? – 2009-08-09 14:44:59

3

我不知道关于谷歌App Engine的,但在我的经验,跨容器和平台的工作原理是使用的ServletContext.getRealPath()的唯一解决方案。

new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt")); 

该规范说:使用正斜杠和一个前导斜杠。这给你平台的独立性,你不依赖于进程的当前目录。