Помогите с использованием URL JAVA в проекте Google Web Toolkit - PullRequest
2 голосов
/ 22 марта 2011

Я пытаюсь внедрить Java-URL в мой проект gwt. Это то, что я сделал до сих пор в плане экспериментов, проб и ошибок и т. Д. HTML:

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <link type="text/css" rel="stylesheet" href="Test_project.css">
    <title>John Mathew's Google AJAX Search API Sample</title>      
    <script src="http://www.google.com/jsapi?key=*insert google api key*" type="text/javascript"></script>  
    <script type="text/javascript">
        google.load('search', '1');  
        google.setOnLoadCallback(function(){
            var searchControl = new google.search.SearchControl();
            searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);     
            searchControl.addSearcher(new google.search.WebSearch());
            var drawOptions = new google.search.DrawOptions();
        drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);     
            searchControl.draw(document.getElementById("content"), drawOptions);           
        }, true); 
</script>

<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
    google.load('search', '1', {language : 'en', style : google.loader.themes.SHINY});
google.setOnLoadCallback(function() {
     var customSearchControl = new google.search.CustomSearchControl('*insert google cse id*');
     CustomSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
     customSearchControl.draw('cse');
}, true);
</script>
<script type="text/javascript" language="javascript" src="test_project/test_project.nocache.js"></script>

Loading ... document.writeln («поисковая система 2»);
Загрузка ...
document.writeln («поисковая система 3»);

<div id="customSearch"></div>       

Теперь обе части JavaScript генерируют текстовое поле Google и кнопку. После ввода информации, он вернет результаты. Это не то, что я хочу. Я хотел бы получить результаты для меня, чтобы манипулировать и играть с. Поэтому я провел небольшое исследование и обнаружил PHP get_file_contents () и JAVA URL (). У меня никогда не было опыта работы с PHP, поэтому я пошел с Java (есть JQuery get (), но я запутался в том, как реализовать и не смог найти примеры).

Чтобы понять, как работает Java URL (), я создал проект Java и узнал о следующем коде:

URL urlsearch = new URL("*insert website*");        
BufferedReader buffreader = new BufferedReader(new InputStreamReader(urlsearch.openStream()));        
String HTMLdisplay;
while ((HTMLdisplay = buffreader.readLine()) != null) {
   System.out.println(HTMLdisplay);
}
buffreader.close();

Он работает именно так, как я хотел, так как получает источник HTML-страницы (например: http://www.bing.com/search?q=gygax).). Для реализации этого я создал проект, основанный на инструкции http://code.google.com/webtoolkit/doc/latest/tutorial/create.html в HTML В коде выше есть строка. Команда, связывающая эти два, находится в классе onModuleLoad(): // Associate the Main panel with the HTML host page. RootPanel.get("customSearch").add(mainPanel);

Это звучит немного запутанно, поэтому я немного подведу итог: используя виджеты Google на моем .java, я создал текстовое поле и кнопку, когда запускаю его как веб-приложение. Когда вы нажимаете кнопку, предполагается, что вы выполняете код java url и извлекаете ресурс страницы, по которому он запрашивает. Вместо этого я получаю эти ошибки:

[DEBUG] [test_project] - Validating newly compiled units
[ERROR] [test_project] - Errors in 'file:/C:/*file path*/Test_project.java'
[ERROR] [test_project] - Line 92: No source code is available for type java.net.URL; did you forget to inherit a required module?
[ERROR] [test_project] - Line 93: No source code is available for type java.io.BufferedReader; did you forget to inherit a required module?
[ERROR] [test_project] - Line 93: No source code is available for type java.io.InputStreamReader; did you forget to inherit a required module?
[ERROR] [test_project] - Line 99: No source code is available for type java.net.MalformedURLException; did you forget to inherit a required module?
[ERROR] [test_project] - Line 102: The method exit(int) is undefined for the type System
[ERROR] [test_project] - Line 107: The method exit(int) is undefined for the type System
[TRACE] [test_project] - Finding entry point classes
[ERROR] [test_project] - Unable to find type 'com.example.test_project.client.Test_project'
[ERROR] [test_project] - Hint: Previous compiler errors may have made this type unavailable
[ERROR] [test_project] - Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
[ERROR] [test_project] - Failed to load module 'test_project' from user agent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.5.30729; .NET4.0E)' at localhost:3410

У меня есть импорт java.io.* and import java.net.* (я тоже пробовал определенные пакеты) вместе со многими com.google.gwt пакетами.

МОЙ ВОПРОС: Как мне преодолеть эти ошибки, которые мешают мне использовать JAVA URL в моем проекте GWT?

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

вы не можете использовать java.io.* или java.net на стороне клиента проекта GWT.Поскольку GWT не предоставляет эквивалентов вышеупомянутым пакетам (за исключением Serializable).

Я думаю, Test_project.java только на стороне клиента, поэтому вы получаете эту ошибку.

Вна стороне клиента вы можете использовать только пакеты lang, util.

2 голосов
/ 22 марта 2011

Google Web Toolkit не поддерживает всю стандартную библиотеку JRE; он эмулирует только определенные классы и, к сожалению для вас, не имеет java.net.*.Однако он имеет com.google.gwt.http.client .Вы должны использовать это.

1 голос
/ 23 марта 2011

Вы можете выполнить эту работу, переместив непереводимый код в другое место в вашем проекте Java.

Помните, GWT переводит Java в javascript и запускается в браузере.Компилятор GWT нацелен на все, что находится ниже модуля client / directory, то есть.Как упоминалось в no.good.at.coding, в javascript отсутствуют пакеты java.io * и java.net *, поэтому GWT не может превратить эту часть вашего кода в js.

Однако вы можете использовать любую библиотеку, если захотите, если переместите код в файлы .java на стороне сервера в каталоге server / rpc / и выставите ее в качестве службы.Чтобы подключить службы rpc на стороне сервера к GWT, вам необходимо создать синхронный и асинхронный интерфейс для вашей службы, а также реализацию, например (не проверено на опечатки):

// rpc service interface, UrlGetServiceRpc.java:
@RemoteServiceRelativePath("urlget.rpc")
public interface UrlGetServiceRpc extends RemoteService {
String getPage(String url);
}

// async version of the interface, UrlGetServiceRpcAsync.java:
public interface UrlGetServiceRpcAsync {
void getPage(string url, AsyncCallback<String> async);
}

// implementation of the service, UrlGetServiceRpcImpl.java:
@Override
public string getPage(string url) {
  // return page fetched using your code above.
}

// now in your page's module file... class level field:
private UrlGetServiceRpc urlGetSvc;

// in your page's constructor:
this.urlGetSvc = GWT.create(UrlGetServiceRpc.class);

// and when you want to display the html:
this.someWidget.setHtml(urlGetAsync.getPage("foo.com/goodreading.html"));

Возможно, есть ошибкив приведенном выше, но это должно дать общее представление.Я также опускаю операторы импорта для несовместимых пакетов из моих модулей GWT (страницы client / *), и вместо этого я использую полные ссылки в моих методах (java.net.URL вместо просто URL).Это ограничивает область действия пакета не-GWTable уровнем метода и помогает убедиться, что компилятор GWT не будет видеть импорт и скуление.

Теперь вы также можете получить html и отобразить его асинхронно,объявив службу на вашей странице как private UrlGetServiceRpcAsync urlSvc;, а затем вызвав асинхронную перегрузку метода.Это немного выходит за рамки этого вопроса;Статья Google « Общение с сервером» - это отличное место, чтобы начать с понимания того, что работает в приложении GWT, и как выделить вещи на нужный уровень.

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