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 .