2016-08-05 3 views
4

Oracle рекомендует использовать JnlpDownloadServletsample для запуска JNLP из веб-приложения.Запуск JNLP без использования класса JnlpDownloadServlet

По каким-либо причинам я не могу использовать его и должен сам код запускать JNLP.

Это то, что я придумал (сервлет, который запускает его):

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{ 
    performTask(request, response); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{ 
    performTask(request, response); 
} 

private void performTask(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{ 
    response.setContentType("application/x-java-jnlp-file"); 
    byte [] b = getJNLP(..some params..).getBytes(); 

    response.setContentLength((int) b.length); 
    OutputStream responseOutputStream = response.getOutputStream(); 
    responseOutputStream.write(b); 
} 

getJNLP является методом, который возвращает весь файл JNLP как String.

Это, кажется, работает нормально. Но я ничего не пропускаю. Существуют ли какие-либо дополнительные заголовки и т. Д.?

UPDATE: Причина, по которой я не использую JnlpDownloadServlet, заключается в том, что я должен запустить этот JNLP из двух разных webapps - Java один & DOTNET один. Я, очевидно, не могу использовать JnlpDownloadServlet из DOTNET webapp. Я написал аналогичный код (как указано выше) в приложении DOTNET, чтобы запустить JNLP. Поэтому я просто сохраняю это в приложении Java.

+1

Этот вопрос является широким. Это не проверка кода. У вас есть ошибки? – xenteros

+0

Задача состоит в том, чтобы дать клиенту действительный файл jnlp, поэтому я думаю, что статическая ссылка на сгенерированный файл jnlp тоже должна работать. Поскольку вы ничего не добавили в генерацию файла jnlp-файла или версии.xml, сложно сказать, что вы ничего не забыли. – Turo

+0

@Turo Файл jnlp не является статичным - он создается во время выполнения методом 'getJNLP'. – user93353

ответ

1

Да, есть еще знать.

Например: JNLP-Download-Service выполняет Замену для кодового и HREF, что очень важно, если вы установите один и то же Webstart-приложение на разных серверах (DEV, QA, Prod). Так что это будет работать на всех серверах:

<?xml version='1.0' encoding='UTF-8'?> 
<jnlp spec='7.0' href='$$name' version='2.5-null' codebase='$$codebase'> 
    <information>... 

Есть много других преимуществ, вы потеряли бы, если не используется JnlpDownloadServlet.

Пожалуйста, обратите внимание на: https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/developersguide/downloadservletguide.html#substitutions

Но, вы могли бы начать Webstart-приложения без каких-либо Servlet, то есть без JnlpDownloadServlet. Вы даже можете запустить приложение WebStart без участия какого-либо сервера. Если вы поместите файл jnlp и все ресурсы в каталог Windows, вам не нужен какой-либо сервер приложений.

Например: У меня есть два файла под C: \ TMP \ webstartdemo

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="file:///C:/tmp/webstartdemo"> 
    <resources> 
     <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="SwingGui.jar" main="true" /> 
    </resources> 
    <application-desc name="Demo" main-class="Demo"/> 
</jnlp> 

Плюс мини SwingGui.jar с помощью только одного класса:

public class Demo { 
    public static void main(String... args){ 
     javax.swing.JOptionPane.showMessageDialog(null, "Hello World"); 
    } 
} 

Тогда я начинаю его с :

javaws c:\tmp\webstartdemo\demo.jnlp 

Конечно, вы можете разместить свой файл jnlp и al l ресурсы на веб-сервере, но это не должно быть динамическим. Надеюсь, это ответ на ваш вопрос.

+0

JnlpDownloadServlet не может использоваться для создания JNLP во всех случаях, например. он не поддерживает замену запуска специфическим с. В этом случае второй сервлет может использоваться для генерации JNLP и JnlpDownloadSerlvet, используемых для обработки банок и т. Д. – tanderson

+0

У меня нет никаких подстановок. Так что это имеет значение, если я использую JnlpDownloadServlet или нет? – user93353

+0

Я обновил вопрос по причине, почему я не использую JnlpDownloadServlet – user93353

0

Да, этого будет достаточно.

Вы не получите все другие функции, такие как substituion, версий или сжатия, но он будет работать.Как я уже сказал, нет необходимости в каком-либо дополнительном сервисе для запуска приложения WebStart.