Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация и фрагментирование XML-данных, для использования в web-приложениях 
V
    Опции темы
azalia
Дата 7.4.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Необходим совет в выборе наилучшего оптимального и более производительного решения следующей задачи, т.е. "толчок в нужном направлении" smile

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

Сам файл выгружается из базы и помещается на web-сервер (доступ в саму базу закрыт из вне). Так же хотелось бы реализовать, чтобы в базе при обновлении данных выгружались только те данные, которые обновляются, т.е. своего рода синхронизация. Но это, наверно, реализуется самой базой и не относится к самому XML? А может его структуру надо формировать каким-то специальным образом?

Нашла в инете много решений по парсингу xml при помощи java-технологий (к чему я более всего и склоняюсь). Наверно, еще придется использовать Ajax (чего мне не очень хочется, т.к. я им не владею). Но среди всех этих решений я не нашла ответ на вопрос, передается ли документ целиком клиенту перед тем как его разбирать и выводить на страницу, либо весь документ передается в память и там разбирается...

Подскажите, а?  smile
PM   Вверх
diadiavova
Дата 7.4.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: нет
Всего: 142



Цитата(azalia @  7.4.2010,  18:22 Найти цитируемый пост)
 Но это, наверно, реализуется самой базой и не относится к самому XML?

Если честно, то я в вопросе не увидел вообще ничего, что относиось бы к самому XML. Всё это решается средствами той технологии, которая используется на сервере(ява так ява).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
azalia
Дата 7.4.2010, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 7.4.2010,  18:13)
Цитата(azalia @  7.4.2010,  18:22 Найти цитируемый пост)
 Но это, наверно, реализуется самой базой и не относится к самому XML?

Если честно, то я в вопросе не увидел вообще ничего, что относиось бы к самому XML. Всё это решается средствами той технологии, которая используется на сервере(ява так ява).

а XPath не поможет?
PM   Вверх
diadiavova
Дата 7.4.2010, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: нет
Всего: 142



Цитата(azalia @  7.4.2010,  19:19 Найти цитируемый пост)
а XPath не поможет? 

Если на сервере просто лежит хмл-документ, то запросить его часть, описанную через XPath невозможно. Документ придёт полностью. То что тебе нужно, делается при помощи серверного скрипта, для того, чтобы на сервере из документа были выбраныкакие-то данные надо там запустить какую-то программу, но хмл - не рограмма, он просто описывает данные.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
azalia
Дата 7.4.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 7.4.2010,  18:23)
Цитата(azalia @  7.4.2010,  19:19 Найти цитируемый пост)
а XPath не поможет? 

Если на сервере просто лежит хмл-документ, то запросить его часть, описанную через XPath невозможно. Документ придёт полностью. То что тебе нужно, делается при помощи серверного скрипта, для того, чтобы на сервере из документа были выбраныкакие-то данные надо там запустить какую-то программу, но хмл - не рограмма, он просто описывает данные.

Понятно, спасибо! А как мне теперь перенести эту тему, например в J2EE? Или может на форуме есть специальный раздел, где решаются подобного рода задачи и продумывается в целом архитектура приложения?
PM   Вверх
diadiavova
Дата 7.4.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: нет
Всего: 142



Цитата(azalia @  7.4.2010,  19:31 Найти цитируемый пост)
А как мне теперь перенести эту тему, например в J2EE?

Это к модератору раздела.
Цитата(azalia @  7.4.2010,  19:31 Найти цитируемый пост)
Или может на форуме есть специальный раздел, где решаются подобного рода задачи 

Специальный раздел зависит от используемой технологии.
Цитата(azalia @  7.4.2010,  19:31 Найти цитируемый пост)
 продумывается в целом архитектура приложения

Это, видимо, сюда
http://forum.vingrad.ru/forum/tech-system-...d-modeling.html


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
azalia
Дата 7.4.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Спасибо за помощь diadiavova!!! Огромный респект ;)
PM   Вверх
azalia
Дата 8.4.2010, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



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

я конечно новичок в этом деле и только учусь, но в общем основная идея, которую бы я хотела решить при помощи J2EE -технологий с применением Servlets, JSP, JAXP и т.д. состоит в следующем:

как мне использовать 1 большой XML-файл частями? А именно, могу ли я создать 2 сервелета, один из которых бы парсил структуру XML так, чтобы выделять из него основные заголовки, а другим сервелетом подтягивать уже нужные данные в зависимости от выбранного заголовка (т.е.скорее всего получится вложенность сервелетов). Делают ли так?  smile 
PM   Вверх
batigoal
Дата 9.4.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(azalia @  8.4.2010,  10:12 Найти цитируемый пост)
как мне использовать 1 большой XML-файл частями? А именно, могу ли я создать 2 сервелета, один из которых бы парсил структуру XML так, чтобы выделять из него основные заголовки, а другим сервелетом подтягивать уже нужные данные в зависимости от выбранного заголовка (т.е.скорее всего получится вложенность сервелетов). Делают ли так?

Ну только не понятно, почему именно два сервлета. Как я понял, нужен один сервлет, к которому обращается клиент за получением фрагмента XML-файла. Разумеется, этот сервлет может использовать какой-то другой класс для осуществления парсинга, но этот второй класс - обычный класс, а не сервлет.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
azalia
Дата 9.4.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(batigoal @  9.4.2010,  16:28 Найти цитируемый пост)
Ну только не понятно, почему именно два сервлета. 


Спасибо batigoal, что откликнулся на мою проблему, а то я уже начала терять надежду на получение каких-либо ответов smile)) Это я делаю своего рода курсовик, поэтому наверно с виду проблема кажется немного странной. 

Описываю ситуацию более подробно, как я вижу:

Клиент заходит на jsp страницу и запускает функцию просмотра товаров, т.е. в этот момент идет запрос на сервер и запускается Сервелет №1. Этот сервелет парсит структуру xml так, чтобы выделить из нее только основные заголовки. В этот момент не нужны все данные, т.к. клиент может вообще ничего не заказать, увидев просто, что предлагается к продаже (если парсить сразу все и ему выводить, то зачем ему ждать пока загрузятся все 10000 товаров (а может и больше), сгруппированных по отдельным классификационным признакам). 
Потом клиент выбирает нужную группу товаров и раскрывает ее. В этот момент идет запрос на сервер и запускается Сервелет№2 , который в зависимости от выбранной группы при помощи Сервелета №1 подгужает какие-нибудь 300-400 позиций...Далее клиент выставляет нужное количество и отправляет запрос. (этот момент еще пока не продуман).

Думаю тут придется еще и Ajax прикручивать, чтобы вся страница не обновлялась в момент повторных запросов...(но этот момент тоже пока не продуман и ajax-ом не владею).
PM   Вверх
dobrolub
Дата 10.4.2010, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



1. Думайте об XML как о базе данных к которой нужно создать механизм доступа
  1. Изучите SAX парсер
2. Думайте об Сервлете как о промежуточном звене между механизмом доступа к данным и запросом
3. Думайте о странице как о статическом  HTML документе с java-script который посылает и принимает запросы от сервлета 
4. Сервлет может быть один. Он, в зависимости от параметров, будет ответственнен за
 а. Отсылку каталога в короткой форме
 б. Приём запроса резервирования
 в. Обработку запроса резервирования и отсылке ответа
   в.1 - ответ:1 (данные на сервере не изменились)
   в.2 - ответ:2 (данные на сервере изменились)
5. Думайте о java-scripte как о коммуникационном механизме и механизме обновления HTML на странице.
  а. - почитайте о HTML +Ajax   http://www.ibm.com/developerworks/ru/library/wa-ajaxintro1/ 
  б. Научитесь добавлять элемент к элементу в HTML
  в. Научитесь посылать запрос к сервлету.

Для пункта 1, создайте структры для отражения XML в виде java объектов для представления данных в коротком виде и подробном.
Механизм доступа - класс доступа лучше писать и отлаживать как простой java объект с методом main(String []args). Так будет проще всего отладить.

удачи!
PM   Вверх
azalia
Дата 10.4.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(dobrolub @  10.4.2010,  00:01 Найти цитируемый пост)
4. Сервлет может быть один. Он, в зависимости от параметров, будет ответственнен за
 а. Отсылку каталога в короткой форме
 б. Приём запроса резервирования
 в. Обработку запроса резервирования и отсылке ответа
   в.1 - ответ:1 (данные на сервере не изменились)
   в.2 - ответ:2 (данные на сервере изменились)


Спасибо, dobrolub за столь подробный ответ! smile
Но, только я снова не поняла один момент...В какой момент будет отсылаться длинная форма каталога? И где будет "связка"?
PM   Вверх
dobrolub
Дата 10.4.2010, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



Это в в.1. Данные не изменились - высылаем положительный ответ вместе с данными в подробной форме.
PM   Вверх
azalia
Дата 10.4.2010, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(dobrolub @  10.4.2010,  00:38 Найти цитируемый пост)
Это в в.1. Данные не изменились - высылаем положительный ответ вместе с данными в подробной форме. 


Таким образом, получается, что сервелет сразу парсит весь документ, хранит в памяти сервера всю структуру и по первому запросу выдает сначала короткий вид каталога (по первому java-классу для короткого вида), а при выборе клиентом во втором запросе (вызывается сервелетом второй java-класс для подробного вида) выдает подробную форму? 

Память занимаемая в этот момент сервелетом разделяемая для всех последующих новых запросов или каждый раз отводится новая?
PM   Вверх
dobrolub
Дата 10.4.2010, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



XML желательно парсить только когда состояние в памяти и состояние на файловой системе различное. Обычно это делают по первому запросу. Назовём его для упрощения DataManager.
примерно так в псевдо-коде
Код

class DataManager {
  public static DataManager _dataManager; // класс будет Singleton - одна instance на всё приложение
  public Object _object;//parsed xml data


  public static DataManager getInstance() {
    if (_dataManager == null)
      _dataManager = new DataManager();

     return _dataManager;
  }
  private DataManager() {}//constructor

  public ShortData[] getShortData() {
    if (_data == null || fileChanged()) {
      load();
    }

   return _data;
  }
}



Код

public class MyServlet extends HttpSerlvet {
  //oтвечает на http://localhost/myservlet?op=shortdata
  public void service(HttpServletRequest req, HttpServletResponse res) {
    if ("shortdata".equals(req.getParameter("op")) {
      DataManager manager = DataManager.getInstance();
      res.writeAjaxResponse(manager.getShortData());
    }
  }
}


PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0882 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.