Mehrere technische Probleme, die damals aufgetreten sind, waren:
1. Übergeben Sie relevante Parameter aus dem Web an die Anwendung,
Lösung: Verwenden Sie dynamische JNLP-Dateien (JSP, um JNLP zu implementieren) und verwenden Sie die folgende Parameterübergabemethode
application-desc
-Elementapplication-desc
ElementDataOutputStream dos=null;The application element indicates that the JNLP file is launching an application (as opposed to an applet). The application element has an optional attribute, main-class, which can be used to specify the name of the application's main class, i.e., the class that contains the public static void main(String argv[]) method where execution must begin.
The
applicationmain-class
attribute can be omitted if the first JAR file specified in the JNLP file contains a manifest file containing themain
Das-Element zeigt an, dass die JNLP-Datei eine Anwendung startet (im Gegensatz zu einem Applet). Das Anwendungselement hat ein optionales Attribut, main-. class, mit der der Name der Hauptklasse der Anwendung angegeben werden kann, d. h. der Klasse, die die Methode
public static void main(String argv[])enthält, in der die Ausführung beginnen muss.Der Das class-Attribut kann weggelassen werden, wenn die erste in der JNLP-Datei angegebene JAR-Datei eine Manifestdatei enthält, die die
private String getStringPostRequest(String command) throws Exception {main
-Klasse enthält.Argumente können der Anwendung durch Einschließen eines oder mehrerer verschachtelter Argumente angegeben werden
argument elements. >arg2argument> ;
application-desc>2. So senden Sie die Ergebnisse der Anwendungsverarbeitung zurück an den Webserver
Die Lösung besteht darin, URLConnection zu verwenden, um die übergebene Web-URL zu kombinieren jnlp (eine Servlet-Adresse für die Hintergrundverarbeitung), Sitzungs-ID (zur Identifizierung des aktuellen Benutzers, Berechtigungen usw.), um ein neues URL-Objekt zu erstellen und Daten zwischen der Anwendung und dem Webserver darüber zu übertragen. Suchen Sie im Hintergrund-Servlet den aktuellen Benutzer aus dem Sitzungs-Listener über die Sitzungs-ID,ObjectInputStream dis=null;
try {URLConnection urlConn = new URL ( webServerStr).openConnection();
urlConn.setDoOutput(true);urlConn.setDoInput(true);
new ObjectInputStream(urlConn.getInputStream());
urlConn.setAllowUserInteraction(false);
urlConn.setUseCaches(false);
urlConn.setRequestProperty(
"Content-Type " ,
"application/x-www-form-urlencoded");
dos = new DataOutputStream(urlConn.getOutputStream());
dos.writeBytes(command + "&sessionId=" + this.sessionId);
dos. close ();
// Eingabe vom Servlet lesen
dis =String ret = dis.readObject().toString();
HttpSession hSession = request.getSession();
dis.close();
return ret;
} Catch (Exception e) {
throw e;
} schließlich{
if ( dos!=null) dos.close();
if ( dis!=null) dis.close();
}
}
Hintergrund-Sevlet:
public void doGet(HttpServletRequest request, HttpServletResponse Response)
throws IOException, ServletException
{System.out.println("Application:" + hSession.getId()) ;
if(MyListener.getSessionById(request.getParameter("sessionId")) != null)hSession = MyListener.getSessionById(request.getParameter("sessionId"));
import java.util.Map;
System.out.println("OK" + hSession ) ;
............}
sessionlistener:
import java.util.HashMap;import javax.servlet.ServletContextEvent;
import javax . Servlet.servletContextListener;import javax.servlet.http.*;
Public class sessionLisions
{
{ static map map = new hashmap ();
}
Public void contextdestroyed (ServletContexTevent servletConteEvent)}
{
Public void created (httpSessionEvent httpSessionEvent)httpSession httpSession = httpSession.getSession.getSession (); ;
}HttpSession httpsession = httpsessionevent.getSession();
public void sessionDestroyed(HttpSessionEvent httpsessionevent)
{map.remove(httpsession.getId());
public static HttpSession getSessionById(String s)
}{
return (HttpSession)map.get(s);
}}
Problem mit der digitalen Signatur des 3.jar-Pakets
4.java-Webstart-Cache-Problem: JNLP-Datei-Cachinghttp://forum.java.sun. com/thread.jspa?forumID=38&threadID=556847
(1)
Wenn Sie den Parameter href= aus dem JNLP-Tag entfernen, speichert Java Web Start 1.4.2 die JNLP-Datei nicht zwischen. Wenn Sie aber auch(2)
Versuchen Sie Folgendes:response.addDateHeader("Date", Calendar. getInstance().getTime().getTime ());
entfernen, scheint das Problem bei den generierten JNLP-Dateien zu liegen.response.addDateHeader("Last-Modified", Calendar.getInstance().getTime().getTime());
Scheint das Problem für uns gelöst zu haben
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Java-Webstart-Problem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!