Доступ к базе данных GWT без RPC - PullRequest
1 голос
/ 04 июля 2011

Я использую GWT для веб-приложения, и мне нужен доступ к базе данных mySql. Там будет только один клиент (приложение используется на iPad локально). Есть ли способ получить доступ к базе данных без RPC? Я ищу возможность направить запрос в базу данных.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 05 июля 2011

Существует 2,5 причины, по которым вы не можете использовать gwt для прямого доступа к MySQL.

Причина № 1. GWT компилируется в Javascript. Вам необходимо открыть сокет для сервера базы данных. GWT не позволяет открывать сокет. Фактически, ни один браузер без комментариев (до появления html5) не смог открыть сокет. Но вы можете открыть сокет, используя Flash Actionscript или HTML 5 javascript.

Причина № 2. Хорошо, допустим, вы использовали сокеты HTML5. И вы потратили 6 месяцев на написание в Javascript соединения JDBC. Но вашему веб-сокету все равно потребуется адрес сервлета на сервере, который поможет вашему веб-сокету установить постоянное соединение - и mysql не может выполнить такое установление.

Причина № 3. SLD - SOP ограничение: (Политика домена второго уровня с одинаковым происхождением) Стандартный браузер ограничивает свои страницы только возможностью запрашивать и включать контент из того же домена второго уровня (SLD), что и сервер, предоставивший эту страницу браузеру. Домены верхнего уровня (и полтора верхнего уровня), такие как .com, .org, .net, .me.us или .co.uk. Таким образом, доменные имена, такие как google.com, fbi.gov, mit.edu, являются доменами второго уровня. А mail.google.com будет доменом третьего уровня. Следовательно, GWT будет работать только в рамках SLD. Ваш веб-сервер также должен быть доступен на том же SLD, что и ваш сервер MySQL.

Требование SLD-SOP и туннелирования состоит в том, чтобы закрыть дыру в безопасности, которая могла позволить любому tom-rick-or-mary войти в вашу систему через ваш браузер. Туннелирование всегда требуется для подключения браузера к серверу, отличному от http-сервера. Туннелирование - это когда браузер использует веб-сервер как иенту (идиш для занятого тела / посредника / создателя совпадений), чтобы добраться до другого сервера.

У вас нет выбора, кроме как использовать GWT-RPC. Возможно, вы не хотите использовать RPC, тогда вы можете использовать RequestBuilder или Script-Include или RequestFactory. Но все они все еще разнообразные средства туннелирования. http://h2g2java.blessedgeek.com/2011/06/gwt-requestbuilder-vs-rpc-vs-script.html.

Существует одна причина, по которой вы можете подключиться к серверу базы данных с помощью клиента gwt: На вашем сервере баз данных должен быть запущен механизм httpd-соединения. То есть ваше приложение gwt получит доступ к серверу БД через http. Я не знаю, какая реляционная база данных имеет доступ http. Скорее всего, вам придется запросить через xml или json.

Однако компания, в которой я работал, создала наш собственный http-сервис, чтобы разрешить «прямой» доступ клиентов. «прямой» - это неправильное название, потому что мы использовали tomcat. Это все еще туннелирование. Любая компания, работающая с базами данных, которая предлагает «прямой» доступ через http, все еще работает в туннеле Туннелирование - от него никуда не уйдешь.

Вы можете дополнить браузер Flash и написать приложение Flash, а не использовать GWT. Если для вас так важен прямой доступ, вам придется отказаться от GWT и разрабатывать во Flash и запустить механизм httpd для сервера базы данных.

2 голосов
/ 05 июля 2011

GWT - это, в конечном счете, Javascript. Как отмечалось на Есть ли привязки JavaScript для MySQL? , в настоящее время нет способа получить доступ к MySQL из Javascript.

Поэтому вы не можете получить к нему доступ из кода GWT на стороне клиента.

1 голос
/ 05 июля 2011

AFAIK это невозможно, и даже если бы это было так, это была бы действительно плохая идея. Вы уверены, что вам действительно нужна база данных? Может быть, что-то вроде gwt-client-storage будет более подходящим.

EDIT

Ваша база данных будет общедоступна и открыта для любых атак.

РЕДАКТИРОВАТЬ 2

Возможно, это даже лучшее решение, так как оно предлагает поддержку доступа к API базы данных HTML5 и предназначено для iPhone / iPad.

GWT-мобильный-WebKit

0 голосов
/ 15 октября 2013

Я думаю, что это невозможно, я имею в виду, если вы хотите, чтобы все ваши данные хранились в БД.Я имею в виду, что GWT компилируется в javascript, а javascript выполняется на клиенте (обычно в веб-браузере).

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

0 голосов
/ 15 октября 2013

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

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