Как давний программист на Паскале и Java, мне нравится идея проверки во время компиляции этих языков. Позже это сэкономит мне много работы в среде выполнения. Иногда мне нравится писать приложения на Java, на стороне клиента с помощью Swing или SWT и на стороне сервера с помощью Enhydra XMLC , 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?

В этой статье я хотел бы показать следующую простую вещь:

  1. Насколько легко реализовать класс Java с помощью стандартных инструментов Eclipse, VSCode или IntelliJ, Maven, JUnit, а затем перенесите его в файл JavaScript.
  2. В этом примере я использую GWT 2.8.2 в качестве транспилятора.
  3. Транспортированный файл 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!