Ciao a tutti... sto realizzando un sistema per interrogare una pagina ASP attraverso un'applet (a dire il vero è un javascript che fa richieste all'applet la quale interroga l'asp) un po' come i remotescripting di microsoft.
Ora il codice l'ho scritto, e sembra funzionare... mi chiedevo se potevate aiutarmi ad ottimizzarlo, io non sono un utente esperto di java e sicuramente ho fatto degli errori. Posto il codice (445 righe):
Spero che qualcuno colga il mio appello!codice:/* Realizzata da AKKAttp S.n.c. * * */ import java.applet.Applet; import java.awt.Graphics; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.util.*; public class AKKAremote extends Applet{ private Dati d; private Leggi leg; private Scrivi scr; public AKKAremote(){ d=new Dati(); } public void init(){} public void setDivisoreDati(String a){ d.setDivis(a); } public String getDivisoreDati(){ return d.getDivis(); } public void inviaRichiesta(String a){ scr = new Scrivi(d); scr.setIndirizzo(a); scr.start(); } public String riceviRichiesta(){ leg = new Leggi(d); leg.start(); while(!d.isInviato()){ } repaint(); scr=null; leg=null; return d.toString(); } public void paint(Graphics g){ g.drawString("Letto da: "+d.getHost(),10,25 ); g.drawString("Nome richiesta: "+d.getNome() ,10,40 ); g.drawString("Stato dati: "+d.getStatoDati() ,10,55); g.drawString("Tipo dati: "+d.getTipoDati() ,10,70 ); g.drawString("Separatore: "+d.getSeparatore(),10,85 ); g.drawString("Dati: "+ d.getValore(),10,100); g.drawString("Flag Errore: "+ d.getFlagErrore(),10,115); g.drawString("MSG Errore: "+ d.getMsgErrore(),10,130); g.drawString("Str ricevuta: "+ d.getRicevuto(),10,145); } /* public static void main(String[] args){ Dati d=new Dati(); Scrivi scr = new Scrivi(d); scr.setIndirizzo("http://localhost/akkaremote/functions.asp"); Leggi leg = new Leggi(d); scr.start(); leg.start(); while(!d.isInviato()){} System.out.println("Leggo...: "+d.getValore()); } */ } //***************************** Classe SCRIVI ********************************** class Scrivi extends Thread{ private Dati dati; private BufferedReader in; private InputStream inputstream; private StringTokenizer st; private int contaRichiesta=0; private String ricevuto=""; private String indirizzo=""; public Scrivi(Dati v){ dati=v; } public void run(){ inserisci(indirizzo); } public void setIndirizzo(String a){ indirizzo=a; } public String getIndirizzo(){ return indirizzo; } public void inserisci(String a){ synchronized (dati){ //try{ if(!isInterrupted()){ dati.resetta(); dati.setHost(a); contaRichiesta++; dati.setNome("Richiesta n°" + contaRichiesta); prendiDati(a); } //}catch(InterruptedException e){} } } protected void prendiDati(String host){ URL url; dati.setStato(1); try{ url = new URL(host); inputstream = (url).openStream(); dati.setMsgErrore(inputstream.toString()); in = new BufferedReader(new InputStreamReader(inputstream)); String line; while ((line = riceviMessaggio())!=null){ if (line.equals("")) continue; dati.setStato(2); st = new StringTokenizer(line); int count = st.countTokens(); if(count>=9) break; } ricevuto=line; dati.setRicevuto(ricevuto); try{ String cmd=st.nextToken(); if(cmd.equals("START")){ cmd=st.nextToken(); if(cmd.equals("TYPE")){ cmd=st.nextToken(); dati.setTipo(calcolaTipo(cmd)); cmd=st.nextToken(); if(cmd.equals("SEP")){ cmd=st.nextToken(); dati.setSeparatore(cmd); cmd=st.nextToken(); if(cmd.equals("DATA")){ cmd=st.nextToken(); dati.setValore(cmd); cmd=st.nextToken(); if(cmd.equals("ERROR")){ cmd=st.nextToken(); if(cmd.equals("0")){ dati.setFlagErrore(false); dati.setMsgErrore("Nessun Errore!"); }else{ dati.setFlagErrore(true); dati.setMsgErrore(cmd); } cmd=st.nextToken(); if(cmd.equals("END")){ dati.setStato(3); }else{ dati.setFlagErrore(true); dati.setMsgErrore("Stringa di ritorno senza terminazione END"); } }else{ dati.setFlagErrore(true); dati.setMsgErrore("Alla stringa di ritorno manca l'ERROR"); } }else{ dati.setFlagErrore(true); dati.setMsgErrore("Alla stringa di ritorno manca il DATA"); } }else{ dati.setFlagErrore(true); dati.setMsgErrore("Alla stringa di ritorno manca il SEP"); } }else{ dati.setFlagErrore(true); dati.setMsgErrore("Alla stringa di ritorno manca il TYPE"); } }else{ dati.setFlagErrore(true); dati.setMsgErrore("Alla stringa di ritorno manca lo START"); } }catch(NoSuchElementException _e){ dati.setFlagErrore(true); dati.setMsgErrore(_e.toString()); } inputstream.close(); //thread.stop(); }catch(FileNotFoundException _e){ dati.setFlagErrore(true); dati.setMsgErrore("File Not Found! Manca il file contenente le funzioni lato server."); }catch(MalformedURLException _e){ dati.setFlagErrore(true); dati.setMsgErrore("Errore! L'URL non è scritto correttamente."); }catch(IOException _e){ dati.setFlagErrore(true); dati.setMsgErrore("Errore di IO nella funzione prendiDati."); dati.resetta(); } } private String riceviMessaggio() { String line = null; try { line = in.readLine(); } catch (IOException e) { dati.setFlagErrore(true); dati.setMsgErrore("Errore di IO nella funzione riceviMessaggio."); } return line; } private int calcolaTipo(String a){ int val; if(a.equals("0")) val=0; //null else if(a.equals("1")) val=1; //boolean else if(a.equals("2")) val=2; //byte else if(a.equals("3")) val=3; //int else if(a.equals("4")) val=4; //long else if(a.equals("5")) val=5; //float else if(a.equals("6")) val=6; //double else if(a.equals("7")) val=7; //char else if(a.equals("8")) val=8; //string else if(a.equals("9")) val=9; //array else if(a.equals("10")) val=10; //date else val=-1; // non esistente return val; } } //***************************** Classe LEGGI *********************************** class Leggi extends Thread{ Dati dati; public Leggi(Dati v){ dati=v; } public void estrapola(){ synchronized (dati){ //System.out.println("Sto abilitando la lettura"); dati.setStato(4); } } public void run(){ estrapola(); } } //***************************** Classe DATI ************************************ class Dati{ private String valore,nome,msgErrore,host,separatore,ricevuto,divis; private int stato,tipo; private boolean flagErrore; public Dati(){ nome="Senza Nome"; stato=0; tipo=8; flagErrore=false; msgErrore="Nessun Errore!"; valore=""; host=""; separatore=""; ricevuto=""; divis="[T]"; } public void resetta(){ this.setNome("Senza nome"); this.setStato(0); this.setTipo(8); this.setFlagErrore(false); this.setMsgErrore("Nessun Errore!"); this.setValore(""); this.setSeparatore(""); this.setRicevuto(""); } public String getNome(){ return nome; } public String getDivis(){ return divis; } public String getSeparatore(){ return separatore; } public String getHost(){ return host; } public int getStato(){ return stato; } public int getTipo(){ return tipo; } public boolean getFlagErrore(){ return flagErrore; } public String getMsgErrore(){ return msgErrore; } public String getValore(){ return valore; } public String getTipoDati(){ String a; switch (tipo){ case 0: a="null"; break; case 1: a="boolean"; break; case 2: a="byte"; break; case 3: a="int"; break; case 4: a="long"; break; case 5: a="float"; break; case 6: a="double"; break; case 7: a="char"; break; case 8: a="string"; break; case 9: a="array"; break; case 10: a="date"; break; case -1: a="inesistente"; break; default: a="Tipo non compatibile"; } return a; } public String getStatoDati(){ String a; switch (stato){ case 0: a="libero"; break; case 1: a="inizio"; break; case 2: a="incompleto"; break; case 3: a="completo"; break; case 4: a="inviato"; break; default: a="Stato non precisato"; } return a; } public void setDivis(String a){ divis=a; } public String getRicevuto(){ return ricevuto; } public void setNome(String a){ nome=a; } public void setSeparatore(String a){ separatore=a; } public void setHost(String a){ host=a; } public void setStato(int a){ stato=a; } public void setTipo(int a){ tipo=a; } public void setFlagErrore(boolean a){ flagErrore=a; } public void setMsgErrore(String a){ msgErrore=a; } public void setValore(String a){ valore=a; } public void setRicevuto(String a){ ricevuto=a; } public boolean isLibero(){ if(stato==0) return true; else return false; } public boolean isInviato(){ if(stato==4) return true; else return false; } public String toString(){ String str =this.getFlagErrore()+divis+this.getTipo()+divis+this.getValore()+divis+this.getSeparatore()+divis+this.getMsgErrore(); return str; } }
Grazie
Rino

Rispondi quotando