Как давний программист на Паскале и Java, мне нравится идея проверки во время компиляции этих языков. Позже это сэкономит мне много работы в среде выполнения. Иногда мне нравится писать приложения на Java, на стороне клиента с помощью Swing или SWT и на стороне сервера с помощью Enhydra XMLC em. >, Struts, Spring Framework, немного HTML, CSS и JavaScript для Интернета браузеры. Но, как мы все знаем, требования меняются каждый день. В 2005 году AJAX сыграл большую роль, и сегодня веб-браузеры - с JavaScript в качестве родного языка - становятся новой платформой.
На рисунке ниже (История веб-фреймворков) вы можете увидеть переход от чистой Java-разработки к фреймворку на основе JavaScript, например Angular, Vue. js и React.
Итак, в 2019 году веб-разработка полностью занята JavaScript или производными, такими как TypeScript? Ну, не совсем ... Одна маленькая деревня неукротимых разработчиков Java с открытым исходным кодом все еще сопротивляется захватчики с помощью транспилятора Java в JavaScript GWT (http://www.gwtproject.org) и J2CL (https : //github.com/google/j2cl )
Итак, вопрос к нам, как разработчикам Java, должны ли мы просто перейти на JavaScript и забыть о наших любимых инструментах и фреймворках Java?
В этой статье я хотел бы показать следующую простую вещь:
- Насколько легко реализовать класс Java с помощью стандартных инструментов Eclipse, VSCode или IntelliJ, Maven, JUnit, а затем перенесите его в файл JavaScript.
- В этом примере я использую GWT 2.8.2 в качестве транспилятора.
- Транспортированный файл JavaScript может быть интегрирован в ваше собственное приложение JavaScript в веб-браузере.
Зачем мне как Java-разработчику? Просто благодаря моим стандартным инструментам и проверке времени компиляции.
Полный пример в этой статье можно найти по адресу https://github.com/lofidewanto/jsinterop-simple-example
Представим, что у вас есть хороший калькулятор Java, который вы хотите повторно использовать в своем приложении JavaScript. Этот Calculator.java реализует метод calculateSum, как показано ниже:
... public double calculateSum(Double[] values) { List<Double> doubles = Arrays.asList(values); if (values != null) { logger.info("Values size: " + doubles.size()); Double sum = doubles.stream().mapToDouble( Double::doubleValue).sum(); return sum; } else { logger.info("Values: null"); return 0.0; } } ...
Чтобы повторно использовать класс Calculator, вам необходимо использовать JsInterop в GWT или J2CL. JsInterop - это платформа для J ava S cript взаимодействия с Java. И GWT, и J2CL используют эту структуру для доступа к JavaScript или для доступа с помощью JavaScript.
Вы можете найти полезную информацию о JsInterop на следующих сайтах:
В нашем простом случае нам нужно экспортировать наш Java-калькулятор в файл JavaScript. Для этого вам просто нужно пометить класс Calculator аннотацией @JsType, которая должна быть доступна глобально с именем «Calculator»:
... @JsType(namespace = JsPackage.GLOBAL) public class Calculator { public double calculateSum(Double[] values) { ... } } ...
GWT переводит класс Java в файл JavaScript с именем Calculator.nocache.js, а затем вы можете использовать этот JavaScript в своем index.html вот так:
<!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Demo GWT Webapp</title> <!-- This is the transpiled Java files included the Calculator class into JavaScript --> <script type="text/javascript" language="javascript" src="calculator.nocache.js"></script> </head> <body> <!-- Here you use the Calculator class as usual in JavaScript --> <button onclick="console.log(new Calculator().calculateSum( [10, 20, 30]));">Calculate!</button> </body> </html>
Теперь вы можете использовать свой класс Java Calculator в веб-браузере. Вы можете реализовать и протестировать класс Calculator как обычно, используя JUnit и Mockito по мере необходимости. Вы можете использовать свою Java IDE, например Eclipse, IntelliJ или VSCode для Java, чтобы написать CalculatorTest.java:
Чтобы увидеть результат, вам просто нужен веб-браузер, результат будет распечатан в консоли после того, как вы нажмете кнопку Рассчитать!:
Если вам нужно отлаживать свой калькулятор Java, вы можете сделать это прямо в Chrome, полностью на Java:
Вот и все!
В этой статье я показал вам , как легко повторно использовать код Java в мире JavaScript. Вы можете просто протестировать свой Java-код, как обычно, с помощью инструментов Java и без проблем интегрировать его в свои веб-приложения на JavaScript. JsInterop делает это легко возможным. Поэтому, как разработчикам Java, вам не нужно отказываться от инструментов и фреймворков Java, вы все равно можете полагаться на проверку времени компиляции из Java.
Полный пример в этой статье можно найти по адресу https://github.com/lofidewanto/jsinterop-simple-example
Если вас интересует дополнительная информация о GWT и J2CL, вы можете прочитать эту более длинную статью о Modern GWT, First Step (http://bit.ly/ModernGwt)
Если у вас есть какие-либо вопросы, просто зайдите в GWT / J2CL Gitter Chat (https://gitter.im/gwtproject/gwt). Сообщество очень активное, и они ответят на все ваши вопросы в контексте GWT и J2CL.
Наслаждайтесь игрой с GWT и J2CL!