Рубрики
Без рубрики

Руководство по веб-запуску Java

В этой статье объясняется, что такое Java Web Start (JWS), как настроить его на стороне сервера и как создать простое приложение.

Автор оригинала: baeldung.

1. Обзор

В этой статье объясняется, что такое Java Web Start (JWS), как настроить его на стороне сервера и как создать простое приложение.

Примечание: JWS был удален из Oracle JDK, начиная с Java 11. В качестве альтернативы рассмотрите возможность использования Open Web Start .

2. Введение

JWS-это среда выполнения, которая поставляется вместе с Java SE для веб-браузера клиента и существует с версии Java 5.

При загрузке файлов JNLP (также известных как протокол запуска сети Java) с веб-сервера эта среда позволяет нам удаленно запускать пакеты JAR, на которые она ссылается.

Проще говоря, механизм загружает и запускает классы Java на компьютере клиента с обычной установкой JRE. Это также позволяет получить некоторые дополнительные инструкции от Jakarta EE. Однако ограничения безопасности строго применяются JRE клиента, обычно предупреждая пользователя о ненадежных доменах, отсутствии HTTPS и даже неподписанных JAR.

С общего веб-сайта можно загрузить файл JNLP для выполнения приложения JWS. После загрузки его можно запустить непосредственно из ярлыка на рабочем столе или средства просмотра кэша Java. После этого он загружает и выполняет файлы JAR.

Этот механизм может быть очень полезен для предоставления графического интерфейса, который не является веб-интерфейсом (без HTML), такого как приложение для безопасной передачи файлов, научный калькулятор, безопасная клавиатура, локальный браузер изображений и так далее.

3. Простое приложение JNLP

Хороший подход-написать приложение и упаковать его в файл WAR для обычных веб-серверов. Все, что нам нужно, это написать желаемое приложение (обычно с помощью Swing) и упаковать его в файл JAR. Затем этот JAR, в свою очередь, должен быть упакован в файл WAR вместе с JNLP, который будет ссылаться, загружать и выполнять класс Main своего приложения в обычном режиме.

Нет никакой разницы с обычным веб-приложением, упакованным в файл WAR, за исключением того факта, что нам нужен файл JNLP для включения JWS, как будет показано ниже.

3.1. Java-приложение

Давайте начнем с написания простого Java-приложения:

public class Hello {
    public static void main(String[] args) {
        JFrame f = new JFrame("main");
        f.setSize(200, 100);
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("Hello World");
        f.add(label);
        f.setVisible(true);
    }
}

Мы видим, что это довольно простой класс свинга. Действительно, ничего не было добавлено, чтобы сделать его совместимым с JWS.

3.2. Веб-приложение

Все, что нам нужно, это упаковать этот пример класса Swing в файл WAR вместе со следующим файлом JNLP:



    
        Hello
        Example
    
    
        
        
    
    

Давайте назовем его hello.jndi и поместим в любую веб-папку нашей ВОЙНЫ. И JAR, и WAR загружаются, поэтому нам не нужно беспокоиться о том, чтобы поместить JAR в папку lib .

URL-адрес нашей последней банки жестко закодирован в файле JNLP, что может вызвать некоторые проблемы с распространением. Если мы изменим серверы развертывания, приложение больше не будет работать.

Давайте исправим это с помощью правильного сервлета позже в этой статье. А пока давайте просто поместим файл JAR для загрузки в корневую папку в качестве index.html , и связать его с элементом привязки:

Давайте также установим основной класс в нашем JAR-манифесте . Это может быть достигнуто путем настройки плагина JAR в pom.xml файл. Аналогично, мы перемещаем файл JAR за пределы WEB-INF/lib , поскольку он предназначен только для загрузки, т. е. не для загрузчика классов:


    org.apache.maven.plugins
    maven-jar-plugin
    ...
    
        
            compile
            
                jar
            
            
                
                    
                        
                            com.example.Hello
                        
                    
                
                
                    ${project.basedir}/target/jws
                
            
        
    

4. Специальные конфигурации

4.1. Вопросы безопасности

Чтобы запустить приложение, нам нужно подписать банку . Создание действительного сертификата и использование плагина JAR Sign Maven выходит за рамки этой статьи, но мы можем обойти эту политику безопасности в целях разработки или если у нас есть административный доступ к компьютеру нашего пользователя.

Для этого нам нужно добавить локальный URL-адрес (например: http://localhost:8080 ) в список исключений безопасности установки JRE на компьютере, на котором будет выполняться приложение. Его можно найти, открыв панель управления Java (в Windows мы можем найти его через панель управления) на вкладке Безопасность.

5. JnlpDownloadServlet

5.1. Алгоритмы сжатия

Есть специальный сервлет, который можно включить в нашу ВОЙНУ. Он оптимизирует загрузку, ища наиболее сжатую скомпилированную версию нашего файла JAR, если она доступна, а также исправляет жестко закодированное значение codebase в файле JLNP.

Поскольку наша БАНКА будет доступна для загрузки, рекомендуется упаковать ее с помощью алгоритма сжатия, такого как Pack200, и доставить обычную банку и любой пакет JAR.PACK.GZ или JAR.GZ сжатая версия в той же папке, чтобы этот сервлет мог выбрать лучший вариант для каждого случая.

К сожалению, пока нет стабильной версии плагина Maven для этого алгоритма сжатия, но мы можем работать с исполняемым файлом Pack200, который поставляется с JRE (обычно устанавливается по пути {JAVA_SDK_HOME}/jre/bin/ ).

Без изменения JNLP и путем размещения jar.gz и jar.pack.gz версии JAR в той же папке, сервлет выбирает лучшую, как только он получает вызов от удаленного JNLP. Это улучшает пользовательский интерфейс и оптимизирует сетевой трафик.

5.2. Динамическая подстановка Кодовой Базы

Сервлет также может выполнять динамические замены жестко закодированных URL-адресов в теге . Изменив JNLP на подстановочный знак , он доставит тот же окончательный тег визуализации.

Сервлет также работает с подстановочными знаками $$codebase , $$hostname , $$name и $$site , которые разрешат ” http://localhost:8080/jnlp-example/ “, ” localhost:8080 “, ” hello.jnlp ” и ” http://localhost:8080 ” соответственно.

5.3. Добавление сервлета в путь к классу

Чтобы добавить сервлет, давайте настроим обычное сопоставление сервлетов для шаблонов JAR и JNLP для вашего web.xml :


    JnlpDownloadServlet
    
        jnlp.sample.servlet.JnlpDownloadServlet
    


    JnlpDownloadServlet
    *.jar


    JnlpDownloadServlet
    *.jnlp

Сам сервлет поставляется в виде набора банок ( jardiff.jar и jnlp-servlet.jar ), которые в настоящее время находятся в разделе демонстраций и образцов на странице загрузки Java SDK.

В примере GitHub эти файлы включены в папку java-core-samples-lib и включены в качестве веб-ресурсов плагином Maven WAR:


    org.apache.maven.plugins
    maven-war-plugin
    ...
    
        
            
                
                    ${project.basedir}/java-core-samples-lib/
                
                
                    **/*.jar
                
                WEB-INF/lib
            
        
    

6. Заключительные мысли

Java Web Start-это инструмент, который может использоваться в средах (интрасети), где нет сервера приложений. Кроме того, для приложений, которым необходимо манипулировать локальными файлами пользователей.

Приложение отправляется конечному пользователю по простому протоколу загрузки без каких-либо дополнительных зависимостей или конфигурации, за исключением некоторых проблем безопасности (HTTPS, подписанный JAR и т. Д.).

В примере Git полный исходный код , описанный в этой статье, доступен для загрузки. Мы можем загрузить его непосредственно с GitHub в ОС с Tomcat и Apache Maven. После загрузки нам нужно запустить команду mvn install из исходного каталога и скопировать сгенерированный файл jws.war из target в папку webapps установки Tomcat.

После этого мы сможем запустить Tomcat, как обычно.

Из установки Apache Tomcat по умолчанию пример будет доступен по URL-адресу http://localhost:8080/jws/index.html .