Ciao a tutti, ho un problema: sto sviluppando un applet e ho bisogno che si connetta a un determinato URL per mandargli dei dati POST e aspettare un'eventuale risposta del server... Da JFrame funziona tutto correttamente mentre da applet no... non carica quello che dovrebbe per cui deduco che la connessione non vada a buon fine...
Il codice che uso:
codice:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Vector;
/**
* Classe per la gestione dell'invio di parametri post a una pagina
* @author Alessandro De Roma
*/
public class SiteFX {
private String postParameters = "";
private String webPage;
/**
* Aggiunge un valore da inviare tramite post
* @param name il nome della variabile da inviare
* @param value il valore della variabile, se non deve avere valore indicare null
*/
public void addPostValue(String name, String value) {
if (value == null) {
try {
postParameters += "&" + URLEncoder.encode(name, "UTF-8");
} catch (Exception ex) {
}
} else {
try {
postParameters += "&" + URLEncoder.encode(name, "UTF-8") + "=" + URLEncoder.encode(value, "UTF-8");
} catch (Exception ex) {
}
}
}
/**
* Invia dati post senza stare in ascolto per dei dati di ritorno
* @return true se l'invio va a buon fine, altrimenti false
*/
public boolean sendPost() {
try {
if(webPage==null|| webPage.equals("")) throw new Exception("Empty url");
addPostValue("im",null);
URL url = new URL(webPage);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(postParameters);
wr.flush();
} catch (Exception e) {
return false;
}
postParameters="";
return true;
}
/**
* Invia dati post restando in ascolto per dei dati di ritorno
* @return null se non riceve dati, altrimenti una stringa contenente i dati
*/
public String sendPostWithReturnValue() {
String returnValue="";
try {
if(webPage==null|| webPage.equals("")) throw new Exception("Empty url");
addPostValue("im","settato");
URL url = new URL(webPage);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(postParameters);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
returnValue+=line+"\n";
}
wr.close();
rd.close();
} catch (Exception e) {
return null;
}
System.err.println(returnValue);
postParameters="";
return returnValue;
}
/*
Vector<String>usedSentences = new Vector<String>();
public boolean alreadyUsed(String sentence){
for (int i = 0; i < usedSentences.size(); i++) {
if(sentence.equals(usedSentences.elementAt(i))) return true;
}
return false;
}*/
/**
* Serve a settare la pagina a cui inviare i dati post
* @param webPageToPointAt la pagina a cui inviare dati post
*/
public void setWebPageToPointAt(String webPageToPointAt){
webPage = webPageToPointAt;
}
/**
* Dice al server di cominciare una sessione
* @return l'id di sessione
*/
public String startSession(){
addPostValue("startsession","set");
return sendPostWithReturnValue();
}
/**
* Termina la sessione
*/
public void endSession(){
addPostValue("endsession","set");
sendPost();
}
}
Come detto, tutto questo funziona a meno che io non usi una Applet... sapete dirmi come posso risolvere??
applet.policy:
codice:
grant {
permission java.security.AllPermission;
};