Поддержка Java Plug In в браузере должна быть исключена. Альтернативное решение для апплета для доступа к клиентской файловой системе? - PullRequest
0 голосов
/ 17 мая 2018

У нас есть веб-приложение, разработанное в Oracle ADF.

1) На странице документа Кнопка загрузки и открытия папки . Мы используем апплет для загрузки файлов в папку на клиентском компьютере и открываем папку

2).На странице документа Кнопка загрузки и открытия файлов . Мы используем апплет для загрузки файлов в папку на клиентском компьютере и открытия этих файлов

3) На странице документа ОткрытьКнопка папки , которая откроет соответствующую папку с документами, если она существует.

Вышеупомянутые 3 пункта уже существуют и работают отлично.

Теперь, так как поддержка плагинов будет удалена избраузеры.Мы ищем альтернативное решение.

Любые предложения помогут нам .. Пожалуйста, сообщите

С уважением, Арун

1 Ответ

0 голосов
/ 17 мая 2018

Чтобы заменить Java-апплет, вы можете использовать локальный сервис, который реализует интерфейс restful.

Запустить локальный сервис с простым запросом GET к файлу jnlp.Например, http://example.com/localservice.jnlp Это загрузит, установит и запустит локальную службу (требования к ней как апплет - она ​​должна быть подписана).Как только локальная служба была успешно запущена, веб-приложение может отправлять и считывать данные из нее, так же как это было бы с любым веб-сервером.Однако следует иметь в виду, что браузеры не допускают перекрестных запросов.Следовательно, либо CORS header из локальной службы должен быть возвращен, либо адрес, который он прослушивает (127.0.0.1), должен быть частью домена приложения (это делается с помощью субдомена с A записью для 127.0.0.1, например,localhost.example.com)

Вот пример преобразования (довольно грубый) Это локальная служба, которая прослушивает порт 8888 для входящих HTTP-запросов и возвращает ответ JSON.

public class LocalService {

    public LocalService() {
    }

    public static void main(String[] args) throws IOException  {
        HttpServer server =  HttpServer.create(new InetSocketAddress("localhost", 8888), 0);
        server.setExecutor(Executors.newSingleThreadExecutor());
        server.createContext("/", httpExchange -> {

            StringBuilder builder = new StringBuilder();

            int read;
            byte buffer[] = new byte[1024];

            InputStream is = httpExchange.getRequestBody();
            while ((read = is.read(buffer)) != -1) {
                builder.append(new String(buffer, 0, read));
            }

            is.close();

            String response = String.format("{\"request\": \"%s\"}", builder.toString());

            Headers headers = httpExchange.getResponseHeaders();
            headers.add("Content-Type", "application/json");
            headers.add("Access-Control-Allow-Origin", "*");
            httpExchange.sendResponseHeaders(200, response.length());

            OutputStream os = httpExchange.getResponseBody();
            os.write(response.getBytes());
            os.flush();
            os.close();
        });

        server.start();
    }
}

ЭтоФайл JNLP, используемый для запуска службы.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Local Service</title>
    </information>

    <resources>
        <!-- Application Resources -->
        <jar href="http://example.com/localservice.jar" main="true" />
    </resources>

    <security>
        <all-permissions/>   
    </security>

    <application-desc name="Local Service" main-class="LocalService">

    </application-desc>
    <update check="background"/>
</jnlp>

И это HTML-страница, которая автоматически или вручную запускает службу и отправляет и получает от нее данные

<!DOCTYPE html>
<html>
    <head>
        <title>Local Service</title>
        <script
            src="https://code.jquery.com/jquery-3.3.1.min.js"
            integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
            crossorigin="anonymous"></script>

        <script>
            $(function() {
                $('#send').click(function() {
                    $.ajax({
                        method: 'POST', 
                        url: 'http://localhost:8888', // or localhost.example.com:8888
                        data: $('#data').val(),

                        success: function(data, textStatus, jqXHR) {
                            alert(data.request);
                        },

                        error: function(jqXHR, textStatus, errorThrown) {
                            alert(errorThrown);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <h1>Local Service</h1>
        <!-- auto load local service -->
        <iframe style="display: none;" src="localservice.jnlp"></iframe>
        <a href="localservice.jnlp">Run Local Service Manually</a>

        <div style="margin-top: 50px;">
            <input id="data"/>
            <button id="send">Send</button>
        </div>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...