Архитектура сайта на основе Java - PullRequest
1 голос
/ 07 февраля 2012

Я только начал программировать на Java, поэтому это может показаться глупым вопросом, но я не смог найти простой ответ в Интернете.Это «большой» вопрос, на который я должен ответить, прежде чем углубляться в разработку, поэтому вы можете помочь мне сэкономить много времени на пробах разных подходов.

В настоящее время я создаю веб-сайт с использованием Java.Важная особенность этого сайта будет реализована через отдельный поток Java (например, демон), который должен работать в фоновом режиме, пока пользователь находится на сайте.В то же время апплеты веб-сайтов должны иметь средства связи с этой веткой.

Я вижу три возможных решения этой проблемы:

  1. Создание традиционного многостраничного веб-сайта с автономной javaапплеты на каждой отдельной странице.Я не уверен, если это возможно, возникают следующие вопросы:

    • Возможно ли, чтобы поток Java, созданный Java-апплетом, продолжал выполнение после перехода пользователя на другую веб-страницу (на том же веб-сайте)?Я предполагаю, что да.
    • Возможно ли, чтобы недавно запущенный Java-апплет связывался с потоком Java, уже работающим в фоновом режиме?(Я видел часть документации, касающейся взаимодействия между Java-апплетами через JavaScript, не уверен, что это может быть использовано в моем случае. Любые другие варианты?)
  2. Создать одно-веб-сайт, с одним Java-апплетом, отвечающим за всю навигацию и отображение всех страниц.Это решает проблему с фоновым демоном, который становится простым в реализации и взаимодействии, как часть одного апплета, но вызывает еще один вопрос:

    • Я знаю, что апплет может изменять текущую веб-страницу.Реально ли использовать эту функцию для имитации навигации между различными страницами?
  3. Создать приложение Java Webstart, в основном, взяв один Java-апплет из п.2 и преобразовав его в подставкуотдельное приложение.

Я хочу, чтобы все это выглядело как веб-сайт, поэтому я бы предпочел вариант 3, а не вариант 2 и вариант 1, а не вариант 2.

Спасибо за любые ваши мысли.

ОБНОВЛЕНИЕ: Кто-нибудь знает ответы конкретно на два вопроса в p1?Если возможно работать с потоками Java описанным способом?

Теперь я бы, скорее всего, выбрал бы Java Webstart Application.Это должно быть наименее болезненным способом.

ОБНОВЛЕНИЕ 2: Я наконец-то решил поработать над одним Java-апплетом, который при необходимости может быть легко преобразован в приложение JWS.Суть моего проекта в том, что мне нужно создать впечатление работы с веб-сайтом, поэтому я прилагаю дополнительные усилия, чтобы он выглядел как веб-сайт.Для знающих людей будет очевидно, что это больше похоже на локальное приложение.Решение, которое я выбрал, имеет следующие преимущества в моей ситуации: - легко конвертируется из приложения JWS в апплет Java и обратно.- нет проблем с запуском фонового потока и общением с ним.- более надежная защита (это означает, что мне не нужно использовать какие-либо механизмы для передачи идентификаторов сеансов от одного апплета к другому)

Противоположности: - если размер становится большим, запуск будет медленным - я надеюсьчтобы избежать этого.- Проблемы безопасности - я попытался подписать апплет, и это очень помогло.- Работа кнопок навигации в браузере (вперед и назад) - надеюсь, что смогу воспроизвести его в апплете.Думаю, апплет должен быть в состоянии поймать это событие.

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Java-поток [...], который должен работать в фоновом режиме, пока пользователь находится на сайте

Если разветвленный поток должен сохранить состояние при входе клиента в систему, я бы использовал базу данных, кэш-память или какой-либо другой уровень персистентности для хранения состояния сеанса клиента. Это гораздо более типичная модель. Вы также можете иметь несколько внешних интерфейсов, которые совместно используют информацию о сеансе в сети.

Если вы не разговариваете с браузером, то создание автономного веб-приложения может быть лучшим выбором. Вы по-прежнему можете использовать HTTP в качестве протокола передачи, и в этом случае я бы рекомендовал использовать веб-реализацию Java, например Jetty . Это потребует значительно меньше технологий и сложности.

Если вам нужно реализовать веб-страницы, я бы, конечно, использовал правильные модели и технологии внешнего интерфейса. Вы должны разделить свои страницы на несколько апплетов - или несколько контроллеров / представлений в модели MVC. Использование апплетов должно быть в порядке. Они (или контроллеры) должны вызывать централизованную службу, которая запускает, связывается и останавливает фоновые потоки в зависимости от потока информации.

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

Надеюсь, это поможет.


Возможно ли, чтобы Java-поток, созданный Java-апплетом, продолжал выполнение после перехода пользователя на другую веб-страницу (на том же веб-сайте)? Я предполагаю, что да.

Да. Разветвленные потоки будут продолжать работать до тех пор, пока они не завершатся или (если это демон) процесс не завершится.

Возможно ли, чтобы недавно запущенный Java-апплет связывался с Java-потоком, уже запущенным в фоновом режиме?

Конечно. Им нужен какой-то механизм для обмена данными. Например, ваша фоновая служба потоков может хранить Map объектов потоков, ключ - это своего рода идентификатор клиента. Всякий раз, когда поток хочет поговорить с фоновым потоком, он может вызвать службу для поиска потока по идентификатору. Что-то вроде:

BackgroundStream thread = threadService.getThread(clientId);
thread.callMethod(...);

Если бы был какой-то синхронный вопрос / ответ, вам понадобится переменная условия или что-то в этом роде. Читайте о потоках Java для получения дополнительной информации.

0 голосов
/ 07 февраля 2012

Апплеты - плохой выбор по двум причинам:

1) Сначала они выполняются в браузере клиента, а не на сервере. Поэтому вы не можете выполнять какую-либо внутреннюю обработку (бизнес-логика или выборка данных из базы данных сервера) с помощью апплетов.

2) Апплеты очень глючные и имеют проблемы с безопасностью. Вот почему в наши дни апплеты вышли из моды.

Теперь перейдем к тому, как вы можете создать сайт, используя технологию Java, для этого вам нужно начать понимать программирование на стороне сервера Java. Начните изучать сервлеты Java и страницы сервера Java. Проще говоря, это Java-программы, которые выполняются на веб-сервере или сервере приложений.

затем начните читать о Java Enterprise Edition.

см. Это руководство для Java Enterprise Edition

0 голосов
/ 07 февраля 2012

Архитектура, используемая в приложениях веб-сайтов на Java, называется Model-View-Controller . Фреймворки, такие как Java Server Faces (Стандарт Java EE 5 и выше), Struts (1.x или 2.x), Spring, Apache Wicket и т. Д., Были разработаны для создания веб-приложений с использованием модели MVC. Вопрос в том, предпочитаете ли вы компонентную архитектуру фреймворка (например, JSF) или нет (о которой вам сейчас не стоит беспокоиться)

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

...