2013-07-15 2 views
0

Итак, вот что я знаю. Приложение Java добавлено, есть два JPanels, один с базовым графиком и один более подробный. Эти два графика размещаются вместе с апплетом. Апплет читает файл со всеми данными опроса учащихся. Все это размещено на экземпляре Desire 2 Learn http://www.desire2learn.com/, называемом courselink https://courselink.uoguelph.ca/shared/login/login.htmlвызов php из приложения java (или JQuery)

Так что все это работает. Аспект, который не получает от courselink, который подписан, чтобы можно было отобразить соответствующий график. Парень, который работает над разработкой courselink, дал мне php-программу, которая захватывает эту информацию и возвращает ее в блок JSON.

код PHP размещен на другой служить то приложение Java (который размещается на courselink Так вот, что я пробовал:.

первый раз захватывая, что страница, возвращенная из Явы

String name = null; 
    URL php = null; 
    try { 
     php = new URL ("http://coles- vs250.cs.uoguelph.ca/whoami/index.php"); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    URLConnection yc = php.openConnection(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
     System.out.println(inputLine); 
    in.close(); 
    return name; 
} 

Тогда я собирался разобрать строку, разобрать имя пользователя и вернуть его. Когда я запустил эту ссылку на курсе, хотя я получил ошибку безопасности, и я ничего не знаю о ошибках безопасности Java. ошибка:

Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: 
access denied ("java.net.SocketPermission" 
"coles-vs250.cs.uoguelph.ca:80" "connect,resolve") 

Итак, я попытался использовать JQuery, чтобы вызвать php с html-страницы, поэтому строка будет переменной в правом опросе, а затем приложение java сможет ее захватить. После некоторых исследований это то, что я собрал. Я не знаю JQuery и на самом деле совершенно вне моего элемента, когда дело доходит до такого программирования вообще. Предупреждения не отображаются, и я не знаю, что случилось.

<html> 
    <head> 
     <title>Java Example</title> 
     <script type='text/javascript' src='http://code.jquery.com/jquery-1.5.2.js'></script> 
     <script type='text/javascript'> 
      $(document).ready(function() { 
       alert("String from iframe: " + $('#whoami').contents().find('body').html()); 
       whoami(); 
      }); 

      function whoami() { 
       $.ajax({ 
        type: "GET", 
        data: {}, 
        url: "http://coles-vs250.cs.uoguelph.ca/whoami/index.php", 
        success: function(data) { 
         alert("whoami complete: " + data); 
        } 
       }); 
      } 
     </script> 
    </head> 

    <body> 
     <p> 
      <iframe style="visibility: visible;" id="whoami" src="http://coles-vs250.cs.uoguelph.ca/whoami/index.php"></iframe>--&gt;</p> 
     <p> 
      <applet width="800" height="1000" code="graphRun.class"></applet> 
     </p> 
    </body> 

</html> 

Любые и вся помощь или предложения будут высоко оценены и, если есть больше информации я должен получить или забыл, что я сделаю все возможное.

+0

Кстати, ваша попытка java возвращает 'name', но вы устанавливаете' name = null', а затем вы не устанавливаете его из URL-адреса. Вы просто распечатываете содержимое ссылки, а не добавляете ее в переменную 'name'. – ajon

+0

Я знаю, что этот код был только для целей тестирования –

ответ

0

Обновлено

Вы говорите, что пользователи будут регистрироваться на сервере в браузере. Это означает, что вам нужен код для запуска из этого браузера, который будет загружать контент с удаленного сервера и сохранять содержимое локально. Я бы рассмотрел эту проблему следующим образом:

  1. создать веб-страницу и разместить ее на сервере (example.com/download.html).
  2. Использование вашей Java программы открыть браузер по умолчанию для веб-страницы:

    URI uri = new URI("http",null, "example.com/download.html","",null); Desktop.getDesktop().browse(uri);

  3. Использование JQuery для загрузки содержимого удаленного сервера

  4. Найти способ, чтобы сохранить содержимое конкретного местоположение файла - одна возможность - downloadify (требуется флэш)
  5. В вашем приложении Java есть цикл while, который проверяет наличие определенного файла. Если он есть, значит, у вас есть контент, если нет, то вам нужно продолжать ждать.

  6. Используйте мой код ниже, чтобы включить файл в формате JSON объект:

GetJsonFromWeb:

private JSONObject getJSONFromWeb(String param){ 
    try{ 
     FileInputStream is = new FileInputStream("file.json"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 
     StringBuilder sb = new StringBuilder(); 
     int cp; 
     while((cp = br.read()) != -1) { 
      sb.append((char) cp); 
     } 
     String jsonText = sb.toString(); 
     return new JSONObject(jsonText); 
    } catch (IOException e) { 
     //Handle exception 
    } catch (JSONException e) { 
     //Handle exception 
    } 
    return null; 
} 

Затем вы можете использовать этот объект следующим образом:

JSONObject jsonObj = getJSONFromWeb("Param_value"); 
try { 
    boolean val1 = jsonObj.getBoolean("some_Json_index"); 
    double val2 = jsonObj.getDouble("some_Json_index2"); 
    //etc. 
+0

Большое вам спасибо за ваш быстрый ответ! Поэтому у меня нет доступа к актуальному php-коду, просто ссылку. Это было просто дано мне от людей, которые разрабатывают опрос, на котором все устроено. Поэтому, когда я запускаю код, который вы мне дали, он не находит блок JSON, я думаю, потому что код еще не запущен. Также необходимо сказать, чтобы он запускал ** из ** сервера courselink, потому что там, где его данные входа gettig. Любые предложения по запуску кода перед тем, как Java пытается захватить блок JSON? –

+0

Можете ли вы перейти к URL-адресу php-скрипта из веб-браузера? Вам не нужно прикасаться к скрипту PHP. PHP - это язык, который работает на веб-сервере и «выводит» веб-документы. Таким образом, в моем коде выше вызывается 'InputStream is = new URL (« http://example.com/website.php?someparameters= »+ param) .openStream();' гарантирует, что PHP-код «выполнен». – ajon

+0

Также кажется, что то, что фактически возвращает страница, это html с встроенным блоком JSON. –

0

Я верю, что у вас эта проблема, потому что форма, которую вы пытаетесь достичь, требует аутентификации, я ssumed, что на основе перенаправления на страницу входа. В моем видении у вас должен быть другой подход. Вы должны принудительно выполнить аутентификацию на странице входа. Я не очень хорошо знаю Java, но я работал с скриншотом экрана в .Net. Вы должны поделиться сеансом в форме входа в систему, а затем попытаться достичь этого URL-адреса. Вы будете имитировать браузер. Извините, но я не могу помочь вам с исходным кодом Java.

+0

. Я использовал пакет python, называемый mechanize, как скребок экрана, который также ведет себя как браузер и позволяет делать то же самое. Вы можете создать исполняемый файл с кодом python и вызвать исполняемый файл из java. Но это большая работа для кажущейся простой проблемы. – ajon

+0

К сожалению, это .NET, но я думал о чем-то более подобном: http://blog.bitlinkit.com/loading-a-web-page-using-c-optional-use-of-cookies-screen- scraper/ –

+0

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

0

Я думаю, что вы получаете это исключение, потому что политика безопасности по умолчанию для апплетов не позволяет выполнять операции сокета (подключитесь и разрешите в вашем случае).

Так что вы должны попробовать изменить политику по умолчанию (не уверен, что вы можете делать все, что хотите, хотя). Так создать security.policy:

grant { 
    permission java.security.AllPermission; 
}; 

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

Затем указать политику безопасности из командной строки с:

-J-Djava.security.policy=security.policy 

Вы также можете установить свойство с System.setProperty().

Смежные вопросы