Вы действительно ошиблись, написав JDBC в Applet. Исходный код апплета является общедоступным для конечного пользователя. Вредоносный конечный пользователь сможет декомпилировать его и увидеть имя/пароль БД и/или изменить его, чтобы изменить SQL-запросы, чтобы сделать DELETE
или TRUNCATE
или любые другие плохие вещи. До свидания база данных.
Вам необходимо создать и создать «веб-сервис», который прослушивает только определенные URL-адреса и возвращает результаты в общем формате, таком как XML, JSON, CSV или что-то еще. Тогда ваш апплет должен просто вызвать именно этот URL-адрес на URLConnection
и обработать результаты. Существует множество библиотек Java для преобразования объектов Java в формат XML/JSON/CSV и наоборот. Вы можете использовать одну и ту же библиотеку в коде как веб-службы, так и апплета.
Представьте себе, что вы выбираете JSON и, таким образом, используя Gson для преобразования между Java и JSON, то вы можете в основном сделать следующим образом в сервлет, который действует как «Web Service»:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Just a basic example. In real, just retrieve data from DB.
List<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
list.add("item3");
String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
это можно получить следующим образом в апплете:
URL url = new URL(getCodeBase(), "servletURL");
Reader reader = new InputStreamReader(url.openStream(), "UTF-8");
List<String> list = new Gson().fromJson(reader, new TypeToken<List<String>>() {}.getType());
// ...
Обычно база данных настроена для приема соединения только с localhost. Это означает, что вы можете подключиться к нему только из сервлета (или чего-то еще, но с сервера). Апплет пытается подключиться к db из ip клиента, но это обычно запрещено. – NullPointer