PDA

View Full Version : [JAVA refresh pagina web tramite Applet e Socket]


soundsgood
31-03-2010, 15:47
ciao ragazzi,

sto cercando di fare un meccanismo di refresh di una pagina web nel seguente modo:

La pagina web "index.html" contiene una applet Java che rimane in ascolto su un socket (multicast) ed aspetta che le arrivi un messaggio. Quando il messaggio arriva, la applet fa il refresh della pagina web "index.html" tramite il comando:

"getAppletContext().showDocument(getDocumentBase());"


Per la cronaca, il messaggio(che la applet aspetta) è inviato(tramite socket) alla applet tramite una classe java avviata dal prompt.

Se testo la applet tramite il comando "appletviewer index.html"(dal prompt)vedo che la comunicazione funziona e il messaggio arriva (perche lo vedo tramite dai System.out.println(...) piazzati prima e dopo il comando di refresh all'interno del codice della applet, anche se non posso vedere se funziona il di refresh, perche per vederlo devo far girare la pagina sul browser).
Invece se faccio girare la applet sul browser vedo che il refresh non funziona ( in questo caso le stampe dai System.out.println(...) non posso utilizzarle per vedere se arriva il messaggio perche sul browser non vengono stampate come è giusto che sia).


Vorrei che il refresh sul browser funzionasse.
Forse è una questione di focus della applet che non rimane attiva mentre invio i messaggi dal prompt..
Tralaltro ho provato a mettere il codice dentro il metodo "init()" o nel metodo "start()" della applet ma non cambiano le cose.

Sapete risolvere questa cosa?

Vi posto il codice dell'applet:

public class ClassApplet extends Applet{




public void init() {
super.init();





//getAppletContext().showDocument(url);
//System.out.println("reindirizzamento");

try {

socket = new MulticastSocket(5009);
}

catch (IOException e) {

e.printStackTrace();
}


try {



System.out.println("Eseguito public void start()");

InetAddress group = InetAddress.getByName("230.0.0.9");
System.out.println("Eseguito inet");

socket.joinGroup(group);
System.out.println("joingroup");

byte[] buf = new byte[255];
DatagramPacket packet;
System.out.println("datagram");
packet = new DatagramPacket(buf, buf.length);

while(true) {


System.out.println("");
System.out.println("");
System.out.println("while");
System.out.println("Attesa dal server");
socket.receive(packet);
String received = new String(packet.getData());
String messaggio = received.substring(0,3);



if(messaggio.equals("ref")) {
System.out.println("ref ricevuto");
getAppletContext().showDocument(getDocumentBase());

}
}

}

catch (Exception e) {

e.printStackTrace();
socket.close();

}






}

}

soundsgood
31-03-2010, 18:08
ok ho capito il problema. Dalla console Java vedo il seguente messaggio:

java.security.AccessControlException: access denied (java.net.SocketPermission 230.0.0.9 connect,accept,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkMulticast(Unknown Source)
at java.net.MulticastSocket.joinGroup(Unknown Source)
at ClassApplet.init(ClassApplet.java:61)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


questo messaggio me lo dava anche quando eseguivo la applet tramite il comando "appletviewer index.html" sul prompt e riguarda la segnatura delle applet, attraverso la quale esse ottengono i permessi per fare determinate azioni.
Dopo aver inutilmente seguito una guida per fare questa segnatura.. sono riuscito ad aggirare il problema e sbloccare i permessi in un altro modo, modificando il file "java.policy" che sta dentro "...\jdk1.6.0_18\jre\lib\security\java.policy" aggiungendo il seguente codice:

codice:
grant { permission java.security.AllPermission; };


che dovrebbe sbloccare tutti i permessi e funziona (sul prompt tramite appletviewer).

Adesso facendo girare la applet sul browser attraverso la pagina "index.html" rida di nuovo questo errore apparso sulla console java

Sapete come fare?

soundsgood
01-04-2010, 11:33
risolto.. per sbloccare i permessi per la applet e socket che girano sul browser bisogna modificare il file java.policy anche in ...\Program Files\Java\jre6\lib\security ed aggiungere

grant { permission java.security.AllPermission; };


invece forse il file java.policy dentro jdk..\jre6\lib\security serve per sbloccare i permessi per far girare la applet con "appletviewer"

Certo sarebbe comodo mettere un grant piu restrittivo, lovvero che da pieni permessi solo alle pagine web che girano su localhost.. qualcuno conosce l'istruzione?