2012-12-05 23 views
8

Ich benutze JavaScript, um JNLP ausführen, die am Ende wird mein Client ausführen.Pass dynamische Parameter über JNLP

Ich versuche, Parameter über JavaScript-Ausführung an die JNLP zu übergeben und diese Parameter über JNLP in meinem Client zu haben.

Die JavaScript ausgeführt wird diese URL zum Beispiel:

http://localhost:8080/MyJnlp.jnlp?login=14hhh765p&pass=ggyyktff 

Jetzt werde versuchen, meine JNLP die Parameter in der <application-desc name tag diese Weise zu erhalten:

<application-desc name="..." main-class="com.main.execute" > 
     <argument>-nosplash</argument> 
     <argument>-q</argument> 
    <argument><%=request.getParameter("login")%></argument> 
    <argument><%=request.getParameter("pass")%></argument> 
</application-desc> 

Aber es hat nicht funktioniert.

login=getParamsFromJnlp("login") 
.. 

public String getParamsFromJnlp(String key) { 
    return System.getProperty(key); 
} 

Die JNLP ist innerhalb apache2.2

Jede Idee, was falsch ist:

Ich konnte nicht diese Parameter in meinem Client-Code auf diese Weise abrufen?

+0

Die Parameter werden als Argumente in der Haupt-Methode übergeben werden. Ich weiß nicht viel über Apache 2.2, aber wie greifen Sie auf die Argumente "-nosplash" und "-q" zu? –

+0

Sie funktionieren gut. Die Sache ist, dass ich Params aus der Abfrage Zeichenfolge, die die JNLP ausführt und senden sie an die Befehlszeilenargumente in meinem Client – rayman

+0

müssen Sie möglicherweise Codebase-Attribut: überprüfen, ob meine Antwort gilt hier: http: // stackoverflow. com/questions/12861447/dynamically-create-response-in-jsf/12863398 # 12863398 –

Antwort

9

Um die http-Parameter in das Argument der Anwendung, die .jnlp Datei ‚konstruiert‘ dynamicly auf Anfrage werden müssen eingefügt werden, weil es erst dann wissen Sie, welche http-Parameter, wird verwendet.

Der Weg, wie Java-Web-Start funktioniert, ist, dass es das .jnlp mehrmals herunterlädt, aber abgesehen vom ersten Mal wird es die Datei von der in den Codebasis- und href-Attributen des jnlp-Elements angegebenen URL herunterladen.

So genügt es nicht, das Argument-Element dynamicly im Element hinzufügen, müssen Sie auch an die Code-Basis hinzufügen/href-Attribute

<jnlp spec="1.0+" 
     codebase=<%=request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getContextPath() + "/" %> 
     href="jnlpfile.jnlp&#063;username=<%=request.getParameter("username")%>&clienttoken=<%=request.getParameter("clienttoken")%>"> 

    ... 
    <application-desc main-class="test.MainClass"> 
     <argument><%=request.getParameter("username")%></argument> 
    </application-desc> 
</jnlp> 
+0

Und ich kann dies tun, ohne jede JSP-Seite? – rayman

+0

Ich habe es versucht es und ich bekam eine Ausnahme: BadFieldException [Das Feld Codebasis hat einen ungültigen Wert: <% = request.getScheme(), <% = request.getScheme()] – rayman

+0

Nein, leider vergessen, dies zu sagen erfordert immer noch jsp. der einzige Weg Ich weiß, wie man das macht, was man tun will, indem man jnlp dynamisch generiert.Verwendet man jsp, php oder ein anderes Äquivalent –

1

Sind Sie sicher, ob der Antworttyp der JSP "application/x-java-jnlp-file" ist?

Wenn nicht, bitte erwähnen Sie es oben auf der JSP und überprüfen.

<% response.setContentType("application/x-java-jnlp-file"); %> 
+0

Ich denke, ich verstehe es nicht. Wo findet die JSP in diesem Szenario statt? Ich führe dies über: main-class = "com.main.execute und ich komme direkt in diese Klasse .. – rayman

+0

Und auf welche Antwort sprechen Sie über? – rayman