Re: Tomcat, reportfile
От: Blazkowicz Россия  
Дата: 28.10.05 08:29
Оценка: 4 (1)
Здравствуйте, vav, Вы писали:

vav>Клиент в браузере отправляет запрос сервлету где я..

vav>1. отвечаю клиенту что запрос принят и возвращаю ему url на несуществующий еще файл
vav>2. делаю запрос к БД, где получаю отчет
vav>3. сбрасываю отчет в файл, чтобы пользователь мог его забрать по вышеуказанному адресу.

vav>Теперь вопросы:

vav>1. не изобретаю ли велосипед? может есть стандартные решения на эту тему?
Готовых решений не встречал. Хотя проблема вроде стандартная.

vav>2. будут ли какие-то проблемы с защитой? вроде как есть какие-то ограничения на работу с файловой системой..

Нет, не будет. Ограничения на работу с файловой системой по умолчанию присутствует у апплетов.

vav>3. Как задать случайное имя файла (аналог GetTempFileName)?

Даже круче есть — сразу файл создаёт:
File.createTempFile(...)
Re[3]: Tomcat, reportfile
От: Blazkowicz Россия  
Дата: 28.10.05 12:02
Оценка: 2 (1)
Здравствуйте, vav, Вы писали:


vav>на пользователе в директории ~/webapps/TestAdapter/ создал директорию DATAFILES и ожидаю, что писать буду именно туда:


vav>
vav>String tmpFileName = "aaa.txt";
vav>String fullPathToTmpFile = req.getContextPath() + "/DATAFILES/" + tmpFileName;
vav>



vav>может все же есть какие-то ограничения на запись?

vav>в логах
vav>2005-10-28 16:39:22,843 [http8080-Processor4] DEBUG [Adapter] java.io.FileNotFoundException: /TestAdapter/DATAFILES/aaa.txt (No such file or directory)

vav>или путь нужно писать как-то иначе?


req.getContextPath() не имеет никакого отношения к файловой системе. Так же в общем случае ты не можешь писать в "~/webapps/TestAdapter/", так как TestAdapter может быть не только ддиректориеей, но и war файлом.
Re[2]: Tomcat, reportfile
От: Blazkowicz Россия  
Дата: 28.10.05 13:57
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>А зачем вообще с какими-то файлами дело иметь?

А>Клиент шлет запрос на какой-то репорт,
А>а сервер в респонзе отдает клинту данные из базы.

А то что сбор всех данных и формирование отчета может быть довольно долгим для отклика мы не думаем? А если отчет большой и у клиента закачка оборвется мы будем заново его формировать, или начнем кэш изобретать? А большие файлы в памяти наверное не удобно хранить и кэш в файлы начнем сбрасывать?
Tomcat, reportfile
От: vav Россия  
Дата: 28.10.05 07:35
Оценка:
Добрый день!

Планирую реализовать следующую схему:

Клиент в браузере отправляет запрос сервлету где я..
1. отвечаю клиенту что запрос принят и возвращаю ему url на несуществующий еще файл
2. делаю запрос к БД, где получаю отчет
3. сбрасываю отчет в файл, чтобы пользователь мог его забрать по вышеуказанному адресу.

Теперь вопросы:
1. не изобретаю ли велосипед? может есть стандартные решения на эту тему?
2. будут ли какие-то проблемы с защитой? вроде как есть какие-то ограничения на работу с файловой системой..
3. Как задать случайное имя файла (аналог GetTempFileName)?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re: Tomcat, reportfile
От: and_vs Россия  
Дата: 28.10.05 08:32
Оценка:
Здравствуйте, vav, Вы писали:

vav>Теперь вопросы:

vav>1. не изобретаю ли велосипед? может есть стандартные решения на эту тему?
vav>2. будут ли какие-то проблемы с защитой? вроде как есть какие-то ограничения на работу с файловой системой..
vav>3. Как задать случайное имя файла (аналог GetTempFileName)?

не знаю насчет вылосипеда, но я делал так:
при запросе пользера, отчет складывался в файл в некой апачевской директории и просто потом
отдавал пользователю урл на этот файл, с которого он его забирал, имя файла формировалось из
iD сессии + System.currentTimeMillis()
Re[2]: Tomcat, reportfile
От: vav Россия  
Дата: 28.10.05 11:00
Оценка:
на пользователе в директории ~/webapps/TestAdapter/ создал директорию DATAFILES и ожидаю, что писать буду именно туда:

String tmpFileName = "aaa.txt";
String fullPathToTmpFile = req.getContextPath() + "/DATAFILES/" + tmpFileName;
try
{
    FileWriter fw = new FileWriter(fullPathToTmpFile);
    fw.write("test");
    fw.flush();
    fw.close();
}
catch (IOException e1)
{
    e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    log.debug(e1.toString());
}



может все же есть какие-то ограничения на запись?
в логах
2005-10-28 16:39:22,843 [http8080-Processor4] DEBUG [Adapter] java.io.FileNotFoundException: /TestAdapter/DATAFILES/aaa.txt (No such file or directory)

или путь нужно писать как-то иначе?
Re: Tomcat, reportfile
От: Аноним  
Дата: 28.10.05 13:45
Оценка:
Здравствуйте, vav, Вы писали:

А зачем вообще с какими-то файлами дело иметь?
Клиент шлет запрос на какой-то репорт,
а сервер в респонзе отдает клинту данные из базы.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String id = req.getPathInfo().substring(1);
Blob attachment = db.getBlob(id);

resp.setContentLength((int)attachment.length());
resp.setContentType("application/octet-stream");

InputStream in = attachment.getBinaryStream();
OutputStream out = resp.getOutputStream();

byte[] buf = new byte[0x16000];
int c;
while ((c = in.read(buf)) != -1) out.write(buf, 0, c);

} catch (SQLException e) {
resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);

} catch (SecurityException e) {
resp.sendError(HttpServletResponse.SC_FORBIDDEN);
}
}

Вот и все.
Re[3]: Tomcat, reportfile
От: and_vs Россия  
Дата: 01.11.05 02:59
Оценка:
Здравствуйте, vav, Вы писали:

vav>String fullPathToTmpFile = req.getContextPath() + "/DATAFILES/" + tmpFileName;

vav>может все же есть какие-то ограничения на запись?
vav>в логах
vav>2005-10-28 16:39:22,843 [http8080-Processor4] DEBUG [Adapter] java.io.FileNotFoundException: /TestAdapter/DATAFILES/aaa.txt (No such file or directory)
vav>или путь нужно писать как-то иначе?

не прописывай путь через ContextPath() он тебе и не даст туда ничё записать, пропиши путь например так "/usr/local/www/DATAFILES/" + tmpFileName
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.