Есть 2 (на самом деле 3) проблемы:
Во-первых, апплету разрешено запускать HTTP-запросы только по той базе URL-адресов, с которой был получен апплет.Вы можете получить его по Applet#getCodeBase()
, который необходимо использовать следующим образом:
URL url = new URL(getCodeBase(), "hello?query=select * from airports");
URLConnection connection = url.openConnection();
// ...
Во-вторых, строка запроса содержит недопустимые символы для использования в URL (пробел, звездочка).Вам необходимо использовать URLEncoder#encode()
для URL-кодирования строки запроса.
String query = URLEncoder.encode("select * from airports", "UTF-8");
URL url = new URL(getCodeBase(), "hello?query=" + query);
URLConnection connection = url.openConnection();
// ...
Вам также нужно убедиться, что вы открываете страницу HTML / JSP с апплетом в браузере натот же базовый URL, что и там, где работает сервлет.Например, http://localhost:8080/hello/pagewithapplet.html, и, следовательно, не из командной строки, не из-за просмотра апплета или чего-то ещеАпплет на самом деле должен обслуживаться с того же веб-сервера, на котором работает сервлет.
Независимо от конкретной проблемы, как указано в вопросе, ваша третья проблема заключается в том, что отправкаПростой SQL-оператор в качестве параметра запроса является очень плохой идеей.Что если хакер декомпилирует ваш апплет и выяснит, как осуществляется связь апплета с сервлетом, а затем изменит инструкцию SQL на что-то еще, например delete from airports
?
Не делайте SQL в апплете, делайте это только в сервлете и позволяйте апплету отправлять только определенные команды, такие как hello?query=list_airports
(который на самом деле открыт для дальнейшей оптимизации, подумайте о веб-сервисе REST, но это оставлено на ваше усмотрение).