Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Асинхронная запись данных в базу из jsp


Автор: Atum 6.7.2012, 19:31
Проблема такая : 

Есть сайт , есть jsp  страница , к которой обращаются пользователи : 

index.jsp  со своим запросом keytext 

 
Код


<%@page contentType="text/html" pageEncoding="windows-1251"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <title>JSP Page</title>
    </head>
    <body>

<%

    String keytext = request.getParameter("keytext");   

      Engine engine = new Engine();
 
     // engine.Logging(keytext);
 
      String  resp = engine.getFullSearchList(keytext);

     out.print(resp);

    
%>
        
    </body>
</html>



 
Есть класс Engine  который возвращает некоторую информацию из конечно автомата 

нужно добавить логирование всех этих запросов от  пользователей 

engine.Logging(keytext)

грубо говоря в этой функции должно быть обращение к базе и запись в нее строки .

как второй вариант - запись в файл на сервере.

Хочется сделать эту операцию  фоном  ( асинхронно )   чтобы данные писались в базу.

Важно что 
String  resp = engine.getFullSearchList(keytext); - код может завершиться раньше чем пройдет транзакция в базу и ответ уже должен увидеть пользователь.


как организовать метод  Logging(String keytext);





Автор: AntonSaburov 9.7.2012, 12:25
Из вопроса не понятно, что и когда должен увидеть пользователь.

И зачем engine.Logging(keytext) должен быть асинхронным ?

Да и сама идея получения данных прямо на JSP - это моветон.

Автор: Atum 9.7.2012, 17:53
Цитата(AntonSaburov @ 9.7.2012,  12:25)
Из вопроса не понятно, что и когда должен увидеть пользователь.

И зачем engine.Logging(keytext) должен быть асинхронным ?

Да и сама идея получения данных прямо на JSP - это моветон.

engine.Logging(keytext) -  долгая операция вставки в базу с кучей проверок , подсчетов  контрольных сумм ,  хэшей итд 

ее можно  вынести в отдельный класс . 

почему моветон ?  а ля php  стиль? 

Антон, а какой будет тогда java стайл ? 


пользователь видит результат  - чем быстрее  будет собрана "страница-ответа"  -  тем лучше . 

так как операция Logging - очень долгая - из за своего алгоритма  - хочется вынести её в фон ...

пример

пользователь отправляет запрос : 

index.jsp?keytext=мир

получает ответ 

страницу данных с кучей текста которую мы получили из конечного автомата реализованного в функции 

engine.getFullSearchList(keytext);


при этом в фоне engine.Logging(keytext) идет работа по анализу того что ввел пользователь , как часто он это вводил , кто еще это вводил 
(как примеры) насколько этот шаблон можно считать  релевантным , частота его использования в автомате , и еще куча разных параметров и проверок, 

результаты которых после всего и будут записаны в базу.


т.е каждый такой запрос пользователя способен полностью перестроить и изменить кучу показателей в базе данных. 

что не должно сказываться на времени работы и генерации jsp  страницы ответа .



Автор: AntonSaburov 9.7.2012, 18:03
Обрабаотывать запрос сервлетом, котоырй внутри себя запустит отдельный тред (если брать J2EE 1.6 так там вообще есть асинхронные сервлеты.

Автор: Atum 9.7.2012, 18:31
Цитата(AntonSaburov @ 9.7.2012,  18:03)
Обрабаотывать запрос сервлетом, котоырй внутри себя запустит отдельный тред (если брать J2EE 1.6 так там вообще есть асинхронные сервлеты.

а разве жизненный цикл JSP не  говорит что она превращается в сервлет ?

Автор: AntonSaburov 10.7.2012, 11:07
Цитата(Atum @  9.7.2012,  18:31 Найти цитируемый пост)
а разве жизненный цикл JSP не  говорит что она превращается в сервлет ? 

Да, превращается. Но в нормальном проектировании используется шаблон MVC. Идея простая - сервлет (Controller) получает запрос, собирает все данные (Model)(заодно может запустить поток) и передает их в JSP (View), которая предназначена ТОЛЬКО для отображения данных. Не надо в нее помещать логику получения этих данных.
Почему это хорошо ? Ну для примера - можно использовать разные JSP дл яотображения. Например версия для обычного сайта и для мобильного. Или вообще отдавать в сервлете не HTML, а JSON. По сути вы на халяву можете получить уже готовый ReST Web Service. Но сами данные получаются в одном месте, а не на пяти версиях страниц. Вы получаете более гибкую структуру, более легкую в сопровождении и расширении.

Именно исходя из такого рода соображений PHP-стиль с макаронным кодом на одной странице считается очень плохим решением. Кстати на сегодня и PHP стараются использовать MVC.

Автор: Atum 10.7.2012, 13:46
Цитата(AntonSaburov @ 10.7.2012,  11:07)
готовый ReST Web Service

Фактически мой класс Engine engine -  и есть контроллер  там вся логика и она доступна на любых страницах .

а в чем преимущества ReST Web Service ?  - что он дает приложению ?

Автор: AntonSaburov 10.7.2012, 14:32
Цитата(Atum @  10.7.2012,  13:46 Найти цитируемый пост)
Фактически мой класс Engine engine -  и есть контроллер  там вся логика и она доступна на любых страницах .

Контроллер чаще всего не содержит логику получения данных. Его задача - переправить запрос на основе параметров, URL  прочая тому, кто умеет обработать запрос нужного вида. И уже этот обработчик, собрав данные вызывает тот View, который ему подходит на даный момент.

Цитата(Atum @  10.7.2012,  13:46 Найти цитируемый пост)
а в чем преимущества ReST Web Service ?  - что он дает приложению ?

Если на упрощенном варианте - это в какой-то степени стандартизованный запрос к ресурсу на его изменение. Удобство в том, что это HTTP-запрос, который может быть сделан из любого приложения и даже из браузера, что очень удобно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)