загрузка данных методом POST
От: Ann_vv  
Дата: 05.08.04 11:17
Оценка:
Доброго всем времени суток.

Есть такая проблема.
Из приложения (MFC) обращаюсь к сервлету методом post. Передаю сервлету данные — файл (CHttpFile).

CInternetSession is(0,1,INTERNET_OPEN_TYPE_DIRECT);
CHttpConnection* conn = NULL;
CHttpFile* pFile = NULL;
conn = is.GetHttpConnection((LPCTSTR)m_sServerName,INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_SECURE,m_nPort);
pFile=conn->OpenRequest(CHttpConnection::HTTP_VERB_POST,szHTTPPath);
bRes = pFile->SendRequest();

... в цикле передаю данные...
pFile->Write(lpBuff,dwRead);
...
pFile->EndRequest();
pFile->Close();
conn->Close();
is.Close();

Все работает. Сервлет принимает данные из входящего(request) потока байт, тоже в цикле.
Прием данных сервлетом (выход из цикла) заканчивается сразу после вызова pFile->EndRequest(). После получения данных, сервлет может обращаться в базу, выполнять какие-то операцие, в результате чего получает данные, которые нужно вернуть обратно клиенту. Пусть это будет число или строка. response.setHeader("param_name",param_value); не работает, так как уже был сделан pFile->EndRequest().
Повторный
bRes = pFile->SendRequest();
снова вызовет сервлет, но это уже будет новый вызов, а не продолжение старого. Можно, конечно, сделать типа switch и передавать сервлету какойто код, в зависимости от которого он выполняет те или иные операции. Но тогда придется разделять функции субд на несколько, что не есть хорошо.

Как организуют двусторонний диалог между сервером и клиентом с помощью сервлетов?

Заранее спасибо.
Ann
=ann=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.