Статьи

Взаимодействие Java и JavaScript с помощью LiveConnect

LiveConnect — это метод, позволяющий Java и JavaScript взаимодействовать друг с другом. Это позволяет вашему классу Java вызывать методы JavaScript и обращаться к среде JavaScript. JavaScript также может обращаться к объектам Java и вызывать методы для них. LiveConnect впервые был реализован в браузере Netscape, и в настоящее время Mozilla Firefox полностью поддерживает эту функцию. В этом руководстве вы узнаете, как писать код, который делает возможным взаимодействие между Java и JavaScript.

Существует два основных аспекта LiveConnect:

  • Вызов методов Java из JavaScript
  • Использование объектов JavaScript в Java

Доступ к Java из JavaScript:

Всякий раз, когда вам нужен доступ к Java-объекту, классу, массиву или пакету, просто используйте один из следующих четырех объектов LiveConnect.

  • JavaObject — используется для доступа к объекту Java из JavaScript.
  • JavaClass — используется как ссылка на класс Java.
  • JavaArray — используется для доступа к массивам Java.
  • JavaPackage — используется как ссылка на пакет Java.

Использование JavaObject

Вы можете создать объект Java и назначить его переменной в JavaScript с помощью new ключевого слова. Когда вы создаете экземпляр класса Java, JavaScript автоматически создает объект JavaObject . Например, вы можете создать экземпляр Java String из JavaScript и назначить его переменной. Затем вы можете использовать оператор точки для доступа к методу length() объекта, как показано ниже.

 var myString=new java.lang.String("Test String"); alert(myString.length()); //prints 11 

Использование JavaClass

Всякий раз, когда вы ссылаетесь на класс Java в своем коде и назначаете его переменной, среда выполнения JavaScript автоматически создает объект JavaClass . Например, следующий код создает объект JavaClass .

 var myInteger=java.lang.Integer; alert(myInteger.MIN_VALUE); 

Использование JavaPackage

Точно так же, когда ваш код JavaScript ссылается на пакет Java, среда выполнения JavaScript автоматически создает объект JavaPackage . В этом случае мы создаем экземпляр класса MyClass который находится внутри пакета mypackage .

 var myVar=new Packages.mypackage.MyClass(); 

Если ваш класс не является частью какого-либо пакета, его можно напрямую создать, как показано в следующем примере.

 var myVar=new Packages.MyClass(); 

Обычно используемые классы, такие как классы в пакетах java , sun и netscape могут быть созданы следующим образом.

 var myVar=new java.lang.String(); 

Приведенный выше код эквивалентен следующему:

 var myVar=new Packages.java.lang.String(); 

Использование JavaArray

Объекты JavaArray создаются автоматически при каждом создании массива Java внутри кода JavaScript. Например, следующий код создает массив Java, содержащий пять String .

 var myArray=java.lang.reflect.Array.newInstance(java.lang.String,5); 

Позже вы можете распечатать длину массива, используя свойство length .

 var myArray=java.lang.reflect.Array.newInstance(java.lang.String,5); alert(myArray.length); //outputs 5 

Доступ к объектам JavaScript внутри кода Java

В основном мы используем следующие два класса для доступа к среде JavaScript из Java.

  • netscape.javascript.JSObject — Используется для доступа к методам и свойствам JavaScript.
  • netscape.javascript.JSException — Используется для обработки исключений в коде Java.

Эти классы не доступны для вашего кода по умолчанию. Чтобы сделать их доступными, вам нужно добавить jar, содержащий эти классы, в ваш CLASSPATH . Откройте каталог установки JRE и перейдите в папку lib . Вы найдете файл jar с именем plugin.jar . Добавьте этот jar в путь к классам, чтобы два вышеупомянутых класса были доступны для JRE во время работы приложения.

Использование JSObject

Все объекты JavaScript, которые появляются в Java, имеют тип JSObject . Помните, мы говорили о вызове методов Java из JavaScript? Ну, вы можете вызвать любой метод Java из кода JavaScript и передать объекты JavaScript в метод в качестве параметра. Эти объекты затем преобразуются в тип JSObject на стороне Java. Чтобы эти методы работали, вам нужно определить формальные параметры типа JSObject в сигнатуре метода Java. В следующем примере показано, как Java-класс Player получает JSObject через конструктор и использует его для получения членов объекта JavaScript.

 открытый класс Player {
   публичное строковое имя, возраст;
   public Player (JSObject js) {
     this.name = (String) js.getMember ( "имя");
     this.age = (String) js.getMember ( "возраст");
   }
 }

Далее мы создадим объект с именем Player в JavaScript.

 function Player(name,age){ this.name=name; this.age=age; } 

Теперь можно создать объект Player JavaScript и передать его конструктору класса Java Player при его создании.

 var player=new Packages.Player(new player("John Doe","20")); // instantiates Java class Player and passes the JavaScript Player object as argument. 

Использование JSException для обработки ошибок JavaScript в Java

Все может пойти не так в вашем коде Java при доступе к среде JavaScript. В этом случае на JSException приходит класс JSException . В следующем примере демонстрируется использование JSException .

 открытый класс TestException {
   публичный объектный процесс (JSObject js, метод String) {
     пытаться{
       js.eval (метод);
       // пытается вызвать метод JavaScript.  Если метод не определен, он выдаст исключение.
     }
     catch (JSException e) {
       System.out.println (е);
     }
     вернуть ноль;
   }
 }

Пример использования

Теперь, когда мы знаем, как вызывать методы Java из JavaScript и использовать объекты JavaScript внутри Java, пришло время создать небольшое приложение, чтобы общая концепция была понятна. Мы создадим очень простое приложение, которое попросит пользователя ввести его / ее имя, возраст и язык программирования по выбору. В зависимости от выбранного языка, приложение отобразит сообщение с указанием наилучшей основы для изучения. Поскольку мы используем LiveConnect для сборки приложения, у нас есть класс Programmer на Java и JavaScript.

На странице также есть апплет. Это сделано потому, что самый первый объект, доступный для LiveConnect, является экземпляром общедоступного апплета. Из апплета мы можем получить желаемый объект. В нашей программе LauncherApplet имеет метод, который возвращает объект Programmer . Во-первых, нам нужно вызвать этот метод, чтобы получить экземпляр Programmer в нашем коде JavaScript. Основная идея заключается в предварительном заполнении объекта Programmer . Затем, после загрузки HTML-страницы, покажите сообщение, отображающее различные свойства объекта. Затем возьмите пользовательский ввод из формы HTML и создайте объект JavaScript Programmer .

Следующим шагом является передача вновь созданного объекта JavaScript в метод Java setData . Метод Java считывает свойства объекта и обновляет его свойства. Убедитесь, что класс Programmer объявлен как открытый, иначе вы не сможете получить к нему доступ из JavaScript. В качестве последнего шага мы вызываем другой метод getAdvice() для объекта Java, который возвращает персонализированный совет о том, какую среду должен использовать пользователь.

Исходный код для класса Java Programmer показан ниже.

 импорт netscape.javascript. *;
 программист открытого класса {
   public String name = "Sandeep";
   public String age = "20";
   public String language = "Java";
   public void setData (JSObject js) {
     пытаться{
       this.name = ((String) js.getMember ( "имя")) toLowerCase ().
       this.age = ((String) js.getMember ( "возраст")) toLowerCase ().
       this.language = ((String) js.getMember ( "язык")) toLowerCase ().
       System.out.println ("Имя =" + имя + ", Возраст =" + возраст + ", язык =" + язык);
     }
     catch (JSException e) {System.out.println (e);}
   }
   public String getAdvice () {
     String advice = "";
     переключить язык){
       case "php":
         advice = name + ", вам обязательно стоит попробовать CodeIgniter.";
         перемена;
       case "java":
         advice = name + ", вам обязательно стоит попробовать JavaServer Faces.";
         перемена;
       кейс "питон":
         advice = name + ", вам обязательно стоит попробовать Django.";
         перемена;
       дефолт:
         advice = "Ваш язык не является языком PHP, Java или Python";
     }
     вернуть совет;
   }
 }

Наш класс LauncherApplet выглядит следующим образом:

 импорт java.applet. *;
 импорт java.awt. *;
 открытый класс LauncherApplet расширяет Applet {
   общедоступный программист getProgrammer () {
     вернуть новый программатор ();
   }
 }

Структура нашей HTML-страницы следующая:

 <html> <head> <title>Applet Test</title> <script type="text/javascript" src="liveconnect.js"/> </head> <body onload="showProgrammer()"> <applet id="app" code="LauncherApplet" height="1" width="1" MAYSCRIPT></applet> <table> <tr> <td>Name</td> <td>:</td> <td><input type="text" id="name"/></td> </tr> <td>Age</td> <td>:</td> <td><input type="text" id="age"/></td> </tr> <td>Programming Language(PHP,Java or Python)</td> <td>:</td> <td><input type="text" id="language"/></td> </tr> </table> <input type="button" onclick="processProgrammer()" value="click"/> </body> </html> 

В liveconnect.js мы определяем две функции и один класс Programmer . Класс Programmer определен ниже.

 function Programmer(name,age,language){ this.name=name; this.age=age; this.language=language; } 

Далее мы определяем функцию showProgrammer() , которая показывает свойства Java-объекта Programmer при загрузке страницы. Код для функции приведен ниже:

 function showProgrammer(){ try{ var programmer=app.getProgrammer(); //app is the id of applet tag which refers to the applet instance. var data="Name= "+programmer.name+",Age= "+programmer.age+",Language= "+programmer.language; alert(data); } catch(e){ alert(e); } } 

Наконец, мы определяем processProgrammer() которая считывает processProgrammer() имя, возраст и язык программирования. Затем он использует эти значения для создания объекта JavaScript Programmer и вызывает setData() на стороне Java. Объект JavaScript Programmer является аргументом для setData() . На следующем шаге мы используем свойства объекта Java Programmer для подготовки рекомендаций. Наконец, совет возвращается в сторону JavaScript.

 function processProgrammer(){ try{ var name=document.getElementById("name").value; var age=document.getElementById("age").value; var language=document.getElementById("language").value; var programmer=app.getProgrammer(); var myprog=new Programmer(name,age,language); programmer.setData(myprog); var advice=programmer.getAdvice(); alert(advice); } catch(e){ alert(e); } } 

Вывод

Подключив JavaScript к Java, вы можете создавать очень мощные приложения. Однако LiveConnect не полностью поддерживается всеми браузерами. Вышеупомянутое приложение протестировано в Firefox 11.0, а код Java скомпилирован с использованием JDK 7. Поэтому, если вы хотите протестировать примеры кода, убедитесь, что в вашей системе установлен JDK 7. Чтобы узнать больше о LiveConnect, посетите LiveConnect в сети разработчиков Mozilla .