2016-08-05 43 views
4

Oracle empfiehlt die Verwendung von JnlpDownloadServletsample, um JNLP über eine Webanwendung zu starten.Starten von JNLP ohne Verwendung der JnlpDownloadServlet-Klasse

Aus irgendwelchen Gründen kann ich es nicht verwenden und muss meinen eigenen JNLP-Startcode programmieren. Diese

ist, was ich mit (Servlets, die es startet) kommen:

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 ist ein Verfahren, das die ganze JNLP-Datei als String zurückgibt.

Dies scheint gut zu funktionieren. Aber ich vermisse etwas. Gibt es zusätzliche Header usw.?

UPDATE: Der Grund, warum ich das JnlpDownloadServlet nicht verwende, ist, weil ich dieses JNLP aus 2 verschiedenen Webapps starten muss - ein Java & ein DOTNET. Ich kann JnlpDownloadServlet offensichtlich nicht von der DOTNET-Webanwendung verwenden. Ich habe ähnlichen Code (wie oben) in der DOTNET App geschrieben, um den JNLP zu starten. Also behalte ich es auch in der Java App.

+1

Diese Frage ist zu weit. Es ist kein Code-Review-Service. Haben Sie Fehler? – xenteros

+0

Die Aufgabe ist nur, dem Client eine gültige jnlp-Datei zu geben, daher denke ich, dass auch ein statischer Link zur generierten jnlp-Datei funktionieren sollte. Da Sie nichts über die Generierung der jnlp-Datei oder der versions.xml hinzugefügt haben, ist es schwer zu sagen, wenn Sie etwas vergessen haben. – Turo

+0

@Turo Die jnlp-Datei ist nicht statisch - sie wird zur Laufzeit mit der 'getJNLP'-Methode generiert. – user93353

Antwort

1

Ja, es gibt mehr zu wissen.

Zum Beispiel: Die JNLP-Download-Service führt Ersetzungen für die Code-Basis und href, was wichtig ist, wenn Sie die gleiche WebStart-Anwendung auf verschiedenen Servern (dev, qa, prod) installieren. So wird dies auf allen Servern arbeiten:

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

Es gibt viel mehr Vorteile, die Sie verlieren würden, wenn sie nicht die JnlpDownloadServlet verwenden.

Bitte nehmen Sie sich einen Blick auf: https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/developersguide/downloadservletguide.html#substitutions

Aber, könnten Sie eine WebStart-Applikation ohne Servlets, das heißt ohne JnlpDownloadServlet starten. Sie können sogar eine WebStart-Anwendung starten, ohne dass ein Server involviert ist. Wenn Sie die jnlp-Datei und alle Ressourcen in einem Windows-Verzeichnis ablegen, benötigen Sie keinen Anwendungsserver.

Zum Beispiel: Ich habe zwei Dateien unter 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> 

plus einem Mini SwingGui.jar mit nur einer Klasse:

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

Dann beginne ich es mit :

javaws c:\tmp\webstartdemo\demo.jnlp 

Natürlich könnten Sie Ihre jnlp-Datei und al l Die Ressourcen in einem Webserver, aber es muss nicht dynamisch sein. Ich hoffe, dass dies die Antwort auf Ihre Frage ist.

+0

Das JnlpDownloadServlet kann nicht in allen Fällen zum Generieren eines JNLP verwendet werden, z. Es unterstützt keine Ersetzung von Start spezifischen s. In diesem Fall kann ein zweites Servlet verwendet werden, um den JNLP und den JnlpDownloadServlvet zu erzeugen, der verwendet wird, um die Gläser usw. zu behandeln. – tanderson

+0

Ich habe keine Ersetzungen. Macht es also einen Unterschied, ob ich JnlpDownloadServlet verwende oder nicht? – user93353

+0

Ich habe die Frage mit dem Grund aktualisiert, warum ich JnlpDownloadServlet nicht verwende – user93353

0

Ja, das wird reichen.

Sie erhalten nicht alle anderen Funktionen wie substituion, Versionierung oder komprimiert, aber es wird arbeiten.Wie gesagt, für den Start einer WebStart-Anwendung ist kein zusätzlicher Service erforderlich.