Maison >Java >javaDidacticiel >Comment résoudre le problème de démarrage Web Java
Plusieurs problèmes techniques rencontrés à l'époque étaient :
1. Transmettre les paramètres pertinents du web à l'application,
Solution : Utiliser des fichiers jnlp dynamiques (jsp pour implémenter jnlp), et utiliser la méthode de transmission de paramètres suivante
Élément application-desc
application-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
L'élémentindique que le fichier JNLP lance une application (par opposition à une applet). L'élément application a un attribut facultatif, main-. class, qui peut être utilisé pour spécifier le nom de la classe principale de l'application, c'est-à-dire la classe qui contient la méthode
public static void main(String argv[])où l'exécution doit commencer.Le
private String getStringPostRequest (commande String) lève une exception {main- class
peut être omis si le premier fichier JAR spécifié dans le fichier JNLP contient un fichier manifeste contenant la classemain
.Les arguments peuvent être spécifiés à l'application en incluant un ou plusieurs imbriqués
argument elements. >arg2argument> ;
application-desc>2. Comment renvoyer les résultats du traitement de l'application au serveur Web
La solution consiste à utiliser URLConnection pour combiner l'URL Web transmise depuis. jnlp (qui est une adresse de servlet de traitement en arrière-plan), sessionID (utilisé pour identifier l'utilisateur actuel, les autorisations, etc.) pour créer un nouvel objet URL et transmettre des données entre l'application et le serveur Web via celui-ci. Dans le servlet d'arrière-plan, recherchez l'utilisateur actuel de l'écouteur de session via l'ID de session,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 ();
// lire l'entrée du servlet
dis =String ret = dis.readObject().toString();
HttpSession hSession = request.getSession();
dis.close();
return ret;
} catch (Exception e) {
throw e;
} enfin{
if ( dos!=null) dos.close();
if ( dis!=null) dis.close();
}
}
Service backend :
public void doGet (requête HttpServletRequest, réponse HttpServletResponse)
lance IOException, ServletException
{System.out.println("Application:" + hSession.getId()) ;
if(MyListener.getSessionById(request.getParameter("sessionId")) != null)hSession = MyListener.getSessionById(request.getParameter("sessionId"));
importer java.util.Map;
System.out.println("OK" + hSession ) ;
............}
sessionlistener:
importer java.util.HashMap;importer javax.servlet.ServletContextEvent;
importer javax . Servlet.servletContextListener;import javax.servlet.http.*;
Public class sessionsLisions
{
implements service, httpsessionListener
{ static map map = new hashmap ();
Public sessionSlistener () public void contextInitialized(ServletContextEvent servletcontextevent)}
{
public void contextDestroyed(ServletContextEvent servletcontextevent)}
public void sessionCreated(HttpSessionEvent httpsessionevent)
map.put( httpsession.getId(), httpsession) ;
{
HttpSession httpsession = httpsession event.getSession();}
{
public void sessionDestroyed(HttpSessionEvent httpsessionevent)HttpSession httpsession = httpsessionevent.getSession();
map.remove(httpsession.getId());
}public static HttpSession getSessionById(String s)
}
{
return (HttpSession)map.get(s);
}http ://forum.java.sun. com/thread.jspa?forumID=38&threadID=556847
Problème de signature numérique du package 3.jar
4.problème de cache de démarrage Web Java : mise en cache du fichier JNLP1.5.0 le fera toujours, mais si vous supprimez également le(2)Il semble que le problème provienne des fichiers JNLP générés.Essayez ce qui suit :response.addDateHeader("Date", Calendar. getInstance().getTime().getTime ());
(1)
Si vous supprimez le paramètre href= de la balise jnlp, Java Web Start 1.4.2 ne mettra pas en cache le fichier jnlp.response.addDateHeader("Last-Modified", Calendar.getInstance().getTime().getTime());
Semble avoir résolu le problème pour nous
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!