Подключение Java-апплета к базе данных MySQL - сбой канала связи - PullRequest
1 голос
/ 07 июля 2010

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

Вот мой апплет: http://mystikrpg.com/play

Подписано, но я получаю следующее исключение:

SQLException Get Причина: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи

Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера.

Как это может произойти и что я могу сделать, чтобы решить эту проблему?

Вот исходный код апплета: http://sodan.pastebin.com/jWKTgBSU

Ответы [ 2 ]

5 голосов
/ 07 июля 2010

Для начала следующее исключение

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
  Communications link failure

может иметь следующие причины:

  1. IP-адрес или имя хоста в URL JDBC неверны.
  2. Имя хоста в URL JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неверен в URL JDBC.
  4. Сервер БД недоступен.
  5. Сервер БД не принимает соединения TCP / IP.
  6. На сервере БД не хватает соединений.
  7. Что-то среднее между Java и DB блокирует соединения, например брандмауэр или прокси.

Кроме того, понимаете ли вы , что Java-апплет физически работает на клиентской машине? То есть машина, на которой работает веб-браузер. Клиент в основном загружает апплет с веб-сервера, и он выполняется на клиентской (локальной) машине. Строка подключения JDBC jdbc:mysql://localhost:3306 будет пытаться подключиться к базе данных MySQL, работающей на той же машине, на которой работает апплет. Вы не можете разумно ожидать, что каждый клиент в мире будет использовать БД MySQL, не говоря уже о вашей базе данных / таблице.

Если все, что вам нужно, это получить доступ к серверу MySQL, расположенному на серверном компьютере (там, где работает веб-сервер), и вы хотите, чтобы апплет связался с ним, то вам действительно нужно создать и запустить веб-сервис на веб-сервере. Поскольку вы также пометили этот вопрос как [PHP], я полагаю, что вы используете PHP на стороне сервера, в этом случае просто создайте сценарий PHP, который выполняет действие MySQL соответственно на основе параметров запроса или pathinfo и возвращает MySQL приводит, например, как JSON или строку XML. В апплете вы можете использовать встроенный Java SE java.net.URLConnection или более удобный клиент Apache HttpComponents для взаимодействия с веб-сервером. Э.Г.

URLconnection connection = new URL(getCodeBase(), "script.php?action=getdetails&productid=1").openConnection();
InputStream response = connection.getInputStream();
// ...

В Java вы можете обработать любой ответ JSON, используя Google Gson любой ответ XML, используя JAXP.


При этом (и не связанных с текущей проблемой) используемое вами имя драйвера JDBC является устаревшим org.gjt.mm.mysql.Driver. Я настоятельно рекомендую использовать правильное имя драйвера, которое было введено более десяти лет назад, для замены старого имени драйвера: com.mysql.jdbc.Driver. Кроме того, вызов Class#newInstance() после Class#forName() также не требуется. Это было для обхода ошибки в старом драйвере. Также см. это объяснение .

0 голосов
/ 07 июля 2010

У апплетов не было достаточных прав для доступа к файлу или БД, когда к ним осуществлялся удаленный доступ.Именно так JVM использует безопасность с помощью песочницы ...

Это то, что я знаю о привилегиях апплета ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...