2016-08-05 1 views
4

Oracle recommande d'utiliser le JnlpDownloadServletsample pour lancer JNLP à partir d'une application Web.Lancement de JNLP sans utiliser la classe JnlpDownloadServlet

Pour quelque raison que ce soit, je suis incapable de l'utiliser et dois coder mon propre lancement JNLP.

C'est ce que je suis venu avec (Servlet qui le lance):

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 est une méthode qui retourne l'ensemble du fichier JNLP comme String.

Cela semble fonctionner correctement. Mais est-ce que je manque quelque chose? Y a-t-il des en-têtes supplémentaires à définir? MISE À JOUR: La raison pour laquelle je n'utilise pas JnlpDownloadServlet est parce que, je dois lancer ce JNLP à partir de 2 webapps différents - un Java un & un DOTNET. Je ne peux évidemment pas utiliser JnlpDownloadServlet depuis la webapp DOTNET. J'ai écrit un code similaire (comme ci-dessus) dans l'application DOTNET pour lancer le JNLP. Donc, je garde juste la même chose dans l'application Java aussi.

+1

Cette question est de trop. Ce n'est pas un service de révision de code. Avez-vous des erreurs? – xenteros

+0

La tâche est simplement de donner au client un fichier jnlp valide, donc je pense qu'un lien statique vers le fichier jnlp généré devrait aussi fonctionner. Comme vous n'avez rien ajouté à propos de la génération du fichier jnlp ou du fichier versions.xml, il est difficile de dire si vous avez oublié quelque chose. – Turo

+0

@Turo Le fichier jnlp n'est pas statique - il est généré lors de l'exécution par la méthode 'getJNLP'. – user93353

Répondre

1

Oui, il y a plus à savoir.

Par exemple: Le jnlp-Service de téléchargement effectue des substitutions pour le code de base et href, ce qui est important si vous installez le même WebStart-application sur différents serveurs (dev, qa, prod). Donc, cela va fonctionner sur tous les serveurs:

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

Il y a beaucoup plus d'avantages que vous perdriez quand ne pas utiliser le JnlpDownloadServlet.

S'il vous plaît jeter un oeil à: https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/developersguide/downloadservletguide.html#substitutions

Mais, vous pourriez commencer une WebStart-application sans Servlet, à savoir sans JnlpDownloadServlet. Vous pouvez même démarrer une application WebStart sans aucun serveur impliqué. Si vous placez le fichier jnlp et toutes les ressources dans un répertoire Windows, vous n'avez besoin d'aucun serveur d'applications.

Par exemple: J'ai deux fichiers sous 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 un mini-SwingGui.jar avec une seule classe:

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

Puis-je commencer avec :

javaws c:\tmp\webstartdemo\demo.jnlp 

Bien sûr, vous pouvez placer votre fichier jnlp et al l les ressources dans un serveur Web, mais il n'a pas besoin d'être dynamique. J'espère que c'est la réponse à votre question.

+0

Le JnlpDownloadServlet ne peut pas être utilisé pour générer un JNLP dans tous les cas, par ex. il ne supporte pas la substitution de lancement spécifique s. Dans ce cas, une seconde servlet peut être utilisée pour générer le JNLP et le JnlpDownloadSerlvet utilisé pour gérer les jars, etc. – tanderson

+0

Je n'ai aucune substitution. Cela fait-il une différence si j'utilise JnlpDownloadServlet ou non? – user93353

+0

J'ai mis à jour la question avec la raison pour laquelle je n'utilise pas JnlpDownloadServlet – user93353

0

Oui, ce sera suffisant.

Vous ne recevez pas toutes les autres caractéristiques comme substituion, versioning ou compression, mais cela fonctionnera.Comme je l'ai dit, il n'y a pas besoin de service supplémentaire pour démarrer une application WebStart.