Апплет не может подключиться к серверу mysql

Я разрабатываю java-апплет, который подключается к базе данных mysql, апплет отлично работает на локальном хосте, но когда я загрузил его и попытался запустить, я получаю сообщение об ошибке: «сбой канала связи, последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. .драйвер не получил никаких пакетов с сервера" я попробовал это на x10hosting и hostable, пожалуйста, помогите мне, если кто-нибудь знает решение...


person Vipul    schedule 02.06.2011    source источник


Ответы (2)


Вы уверены, что порт вашего сервера MySQL действительно открыт для публики? Например, на общедоступном IP-адресе, который не заблокирован вашими маршрутизаторами/сетью? Скорее всего, ваш экземпляр MySQL недоступен из внешнего мира...

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

Если ваш сервер MySQL действительно доступен для внешнего мира, является ли его хост таким же, как и хост, с которого загружается апплет? Это одно из требований безопасности для (неподписанных) апплетов: они могут открывать сетевые подключения только к тому же хосту, с которого они были загружены. Но если бы это было проблемой, я бы ожидал, что вы получите исключение безопасности (если только Connector/J не скрывает это от вас).

person T.J. Crowder    schedule 02.06.2011
comment
хорошо, это может быть проблемой, но не могли бы вы уточнить, как я могу подключить свою базу данных к моему апплету... - person Vipul; 02.06.2011
comment
@Vipul: поищите примеры архитектуры веб-приложений. Веб-приложения — классический пример трехуровневой или многоуровневой архитектуры. Элементы на стороне клиента (веб-страницы, апплеты) взаимодействуют с вашим веб-сервером, который взаимодействует с вашей базой данных. Ваша база данных никогда не должна быть напрямую доступна из внешнего мира. - person T.J. Crowder; 02.06.2011

Апплет клиентский. Если вы хотите напрямую подключиться к серверу mysql, это будет означать, что каждый пользователь, открывающий апплет, должен либо установить mysql, либо иметь доступ и учетные данные к удаленной базе данных. Даже если ваш брандмауэр разрешает доступ, это очень плохая идея. Если вы это сделаете, все будут иметь доступ к вашей базе данных.

Поэтому, если вы хотите общаться с удаленной базой данных, используйте какой-либо протокол (проще всего будет http через сервлет) для отправки запросов на сервер и получения ответов, сгенерированных на основе результатов базы данных. Например, вызов http://yoursite.com/addRecord?name=foo&[email protected] может указать серверному приложению открыть (локальное) соединение с mysql и вставить запись.

person Bozho    schedule 02.06.2011
comment
да, я хочу общаться с удаленной базой данных, но не могли бы вы рассказать, как это сделать, потому что я новичок :( - person Vipul; 02.06.2011
comment
... означает, что у каждого пользователя, открывающего апплет, должен быть установлен mysql. Почему? Вы можете распространять Connector/J вместе с библиотеками вашего апплета. Я не говорю, что это удаленно хорошая идея, но пользователям не нужно устанавливать MySQL. - person T.J. Crowder; 02.06.2011
comment
да, я добавил Connector/J с библиотеками моего апплета. но когда я запускаю программу и когда она пытается подключиться к базе данных, она выдает мне ошибку, которую я указал в сообщении - person Vipul; 02.06.2011
comment
@Т.Дж. Crowder @Vipul - ага, уточнил :) - person Bozho; 02.06.2011