Проблема с записью файла в сервлете, развернутом на tomcat - PullRequest
2 голосов
/ 04 августа 2010

Я написал сервлет, который записывает изображение в корневой каталог моего приложения и затем доставляет его клиенту, когда он получает запрос GET. Все работает нормально, когда я тестирую его в Eclipse с Jetty (поставляется с плагином GWT). Но когда я перемещаю его в Tomcat, я получаю исключение filenotfound (поскольку изображение вообще не записывается, поэтому его нельзя вернуть клиенту). Это проблема с разрешениями на запись файлов?

Я добавил это в файл catalina.policy, но это тоже не помогает (webui - это папка моего приложения):

grant { 
   permission java.io.FilePermission "${catalina.home}/webapps/webui/","read,write,delete";
   permission java.io.FilePermission "${catalina.home}/webapps/webui/*","read,write,delete";
    };

Ответы [ 2 ]

5 голосов
/ 04 августа 2010

Изменение политики безопасности не поможет с этим;если бы это была проблема политики, вы бы получили SecurityException, а не FileNotFoundException.

Последнее указывает на то, что процесс Java пытается открыть дескриптор файла в соответствующем режиме, ноотказано операционной системой.Наиболее вероятной причиной этого является то, что файл (или родительский каталог) недоступен для записи пользователю, выполняемому процессом Java как.

Посмотрите на разрешения для папок, которые вы пытаетесь записатьи, в частности, найдите пользователя, с которым вы используете Tomcat, и какие у него будут эффективные разрешения.

1 голос
/ 04 августа 2010

Я решил проблему. Как предположил Анджей, проблема была не в разрешениях. Путь к файлу был неправильным, потому что я не использовал serverContext.getRealPath () для записи файлов. Я нашел решение, увидев это: http://www.velocityreviews.com/forums/t131134-specifying-path-for-file-to-be-read-by-servlet-with-tomcat.html

Tnx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...