Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть пятая   В заключительной части материала речь идёт о сохранении разобранного запроса в документ базы Notes и об изменениях, сделанных для этого сохранения в классе Memo
Шаблоны и примеры Читать статью
 
Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть четвёртая   В предлагаемой вниманию читателя части описания идёт речь об обработке полученной информации запроса после разбора multipart-data
Шаблоны и примеры Читать статью
 
Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть третья   Продолжение материала, посвящённого сервлету Domino, выполняющего обработку post-запроса с данными типа multipart/form-data. В настоящей части продолжается описание разбора запроса к сервлету
Шаблоны и примеры Читать статью
 


Шаблоны и примеры

Главная   Библиотека   Шаблоны и примеры

Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть вторая

Николай Норкин

г. Киров

notesnet@notesnet.ru

<<< Предыдущая чвсть | Продолжение >>>

Основной запрос к сервлету будет post-запрос /servlets/UploadProcess?ключ_профиля_настройки

Для обновления списка настройки будет использоваться get-запрос /servlets/UploadProcess

Основная процедура обработки post-запросов

protected void doPost( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

lotus.domino.Session session = null;

javax.servlet.http.HttpServletRequest _request = request;

javax.servlet.http.HttpServletResponse _response = response;

java.io.PrintWriter out = null;

try {

String remote_address = _request.getRemoteAddr(); // ip-адрес пользователя потребуется при обработке Google reCaptcha

String user = _request.getRemoteUser(); // пользователь будет записан как автор (создатель) документа

String parameter = _request.getQueryString(); // переданный ключ профиля настроек

_response.setContentType("text/json;charset=Windows-1251");

NotesThread.sinitThread();

session = NotesFactory.createSession();

out = _response.getWriter();

// Передать входной поток в класс обработки

ru.medkirov.servlets.uploadprocess.DocumentContext documentContext = new ru.medkirov.servlets.uploadprocess.DocumentContext(session, _request);

// дальнейшая обработка результатов

.....

}

catch (Exception e) {}

finally {

try {

if (session != null) session.recycle();

NotesThread.stermThread();

} catch (Exception e) {}

}

}

Класс ru.medkirov.servlets.uploadprocess.DocumentContext и обработка входного потока

При инициализации класса входной поток распарсивается и складывается в объекты ru.medkirov.servlets.uploadprocess.Item

public DocumentContext(lotus.domino.Session session, javax.servlet.http.HttpServletRequest request) {

this.session = session;

this.parse(request);

}

protected void parse(javax.servlet.http.HttpServletRequest request) {

try {

javax.servlet.ServletInputStream inputStream = request.getInputStream();

// java.util.Enumeration<String> headerNames = request.getHeaderNames(); // получение заголовков содержимого post-запроса

String header = request.getHeader("Content-Type"); // получение заголовка Content-Type

String[] headers = header.split(";");

if (!headers[0].equalsIgnoreCase("multipart/form-data")) return; // обрабатывается только запрос с содержимым multipart/form-data

headers = headers[1].trim().split("=");

if (!headers[0].equalsIgnoreCase("boundary")) return;

header = headers[1].trim(); // получение значения boundary - разделителя частей запроса

byte[] boundary = header.getBytes();

java.nio.charset.Charset encoding = java.nio.charset.Charset.defaultCharset();

com.google.common.net.MediaType contentType = com.google.common.net.MediaType.parse("multipart/form-data");

// обработка потока (дробление на части) и передача в метод addItem

org.apache.commons.fileupload.MultipartStream multipartStream =

                new org.apache.commons.fileupload.MultipartStream(inputStream, boundary);

boolean nextPart = multipartStream.skipPreamble();

while (nextPart) {

header = multipartStream.readHeaders(); // выделить заголовок

            this.addItem(header, multipartStream); // выделенную часть - в обработку

            nextPart = multipartStream.readBoundary(); // к следующей части

        }

} catch(Exception e) {

    e.printStackTrace();

}

}

protected void addItem(String header, org.apache.commons.fileupload.MultipartStream multipartStream) {

try {

java.io.ByteArrayOutputStream stream = new java.io.ByteArrayOutputStream();

java.io.PrintStream body = new java.io.PrintStream(stream);

multipartStream.readBodyData(body);

// Хранение и дальнейшая обработка - в объекте класса ru.medkirov.servlets.uploadprocess.Item

ru.medkirov.servlets.uploadprocess.Item item = new ru.medkirov.servlets.uploadprocess.Item( header, stream);

String key = item.getKey();

if (key.equals("")) return;

// все item сохраняются в java.util.Map fileItems

if (this.fileItems == null) this.fileItems = new java.util.HashMap();

this.fileItems.put(key, item); // а вот эту строчку в окончательном варианте придётся пересмотреть для работы с многозначными полями

if (item.isAttachment()) this.hasAttachment = true;

}

catch (Exception e) {

    e.printStackTrace();

}

}

Функции класса ru.medkirov.servlets.uploadprocess.DocumentContext

Функция hasAttachment() возвращает результат, содержатся ли в запросе файлы

public boolean hasAttachment() {

return this.hasAttachment;

}

Функция getKeys() возвращает список имён переданных в запросе значений

public Object[] getKeys() {

try {

return this.fileItems.keySet().toArray();

}

catch (Exception e) {}

return null;

}

Функция getFileItem(String key) возвращает объект по имени

public ru.medkirov.servlets.uploadprocess.Item getFileItem(String key) {

try {

return (ru.medkirov.servlets.uploadprocess.Item) this.fileItems.get(key);

}

catch (Exception e) {}

return null;

}

Остальные функции осуществляют навигацию по объектам

public ru.medkirov.servlets.uploadprocess.Item getFirst() {

try {

if (this.fileItems == null) return null;

this.iterator = this.fileItems.entrySet().iterator();

java.util.Map.Entry entry = (java.util.Map.Entry) this.iterator.next();

return (ru.medkirov.servlets.uploadprocess.Item) entry.getValue();

}

catch (Exception e) {}

return null;

}

public boolean hasNext() {

if (this.iterator == null) return false;

return this.iterator.hasNext();

}

public ru.medkirov.servlets.uploadprocess.Item getNext() {

try {

if (this.iterator == null) return null;

if (!this.iterator.hasNext()) return null;

java.util.Map.Entry entry = (java.util.Map.Entry) this.iterator.next();

return (ru.medkirov.servlets.uploadprocess.Item) entry.getValue();

}

catch (Exception e) {}

return null;

}

public ru.medkirov.servlets.uploadprocess.Item first() {

return this.getFirst();

}

public ru.medkirov.servlets.uploadprocess.Item next() {

return this.getNext();

}

Ссылки

Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть первая

Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть третья

Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть четвёртая

Задача Domino HTTP. Обработка загружаемых файлов сервлетом UploadProcess. Часть пятая

Код сервлета

Apache Commons FileUpload
 
  Опубликовано — 02/10/2021 |    



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU