Newsgroup: it.comp.java
Titolo: File locali, applet e guestbooks

URL e URLConnection del package java.net...
Dunque, io sono arrivato, smanettando un po', a questo punto:
Apro la connessione ma non riesco a scrivere sul file di prova perche' mi
dice "protocol doesn't support output". Eppure non vedo errori nel codice
che ho scritto...
Provo a mandarlo un po' ridotto cosi' mi dite dove sbaglio:
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.lang.*;
import java.io.*;
import java.net.*;
public class GuestBook extends Applet{
  TextArea messaggio = new TextArea("Message", 10, 30);
  TextArea nome = new TextArea("Name", 1, 30);
  Button Submit = new Button("Submit");
  Button Reset = new Button("Reset");
  public void
){   
    setBackground(new Color(45,64,128));
    resize(320,250);   
    add(Submit);   
    add(Reset);    
    add(messaggio);
    add(nome);
  }
  public boolean action(Event evento, Object argomento) {
    if(evento.target instanceof Button)  
    {     
      if(argomento.equals("Submit")){
        try {
          URL u = new URL(getCodeBase()+"prova.txt");
          URLConnection urlc = u.openConnection();
          urlc.setDoOutput(true);
          DataOutputStream server =
            new DataOutputStream(urlc.getOutputStream());
          server.writeBytes("x");
          server.close();
          } catch (Exception e) {
          System.out.println(e);
        }
      } 
      if(argomento.equals("Reset")) {
        messaggio.replaceText("Your message ", 0, 100);
        nome.replaceText("Your Name ", 0, 100);
      }  
      return true;   
    }
    return false;
}
}
Pr
ovate a compilarlo... il file html che ospita l'applet vorra' la tag
<applet code="GuestBook" width=300 height=320>
      </applet>
e niente piu'... Vi sarei immensamente grato se mi aiutaste a risolvere
questo problema. Vorrei veramente distribuire gratuitamente un applet in
grado di gestire un bel guestbook (personalizzabile) in maniera piu'
semplice e veloce che non usufruendo di servizi come GuestWorld e soci..
Lone Wolf.
Email: 
m_lor...@writeme.com
http://lonewolfontheweb.home.ml.org

          URL u = new URL(getCodeBase()+"prova.txt");
Questo mi sembra sbagliato -- il "+" indica una concatenazione di
stringhe, quindi stai trasformando la URL di code-base in una
stringa, diciamo ad esempio "
http://host.com/pippo.class
", poi a
questa stringa concateni "prova.txt", e hai quindi una stringa del
tipo "
http://host.com/pippo.classprova.txt
", che dubito sia quello
che desideri.  Dovresti, mi pare, avere una virgola dove ora hai
il +, per usare il costruttore a due argomenti di URL che applica
la path relativa "prova.txt" alla URL di code-base.
Ma temo che il problema non sia questo; piuttosto, si direbbe
che, per citare il testo del manuale relativo all'eccezione che
penso tu stia ricevendo (e credo che tu la riceva quando
chiedi l'output stream), UnknownServiceException, "the 
application is attempting to write to a read-only URL 
connection".  Cosa renda read-only la connessione, ahime`,
non so dirtelo; la cosa piu` probabile e` che il server
HTTP su cui vive la tua pagina non permetta a chicchessia
di scrivere su arbitrari file.  Prova, se puoi farlo, a rendere
"leggibile e scrivibile da chicchessia" uno specifico file, poi
prova anzitutto a leggerlo (cosi` rimuovi bug tipo quello che
secondo me hai nel costruttore dell'URL) e poi a scriverlo
(se la scrittura non ti e` permessa pur avendo tu settato
tutti i bit di permission di quel file, allora sai che e` il server
HTTP a bloccarla).
Se non puoi convincere il gestore del tuo server a permettere
a chiunque di scrivere arbitrari file per HTTP, vedi un po' se
hai piu` fortuna col protocollo FTP (per qualche ragione pare
piu` facile convincere i gestori di sistema a lasciar scrivere in
FTP, magari solo in uno specifico directory "incoming" -- che
pero` poi spesso essi non abilitano in lettura, per evitare che
sconosciuti usino il loro sito per scambiarsi file, magari non
legali...).
Se le politiche del gestore del tuo server, assai ragionevolmente,
non ti permettono di ottenere scrivibilita` arbitrarie sui file del
server stesso, allora non mi pare che tu abbia alternative: devi
convincere il gestore in questione a lasciare che, in qualche
modo, vengano fatti partire sul server stesso processi che
girano codice tuo -- servlet, CGI, demoni, *qualcosa* che possa
permettere alla tua applet in un qualsiasi modo di connettersi e
spedire dati a qualcuno che abbia finalmente il permesso di
andarli fisicamente a scrivere da qualche parte.
Puoi anche naturalmente decidere di usare URL che includono
anche un utente e relativa password (o interagire con l'utente
della tua applet per chiedergli username e password); stai pero`
molto attento a non lasciare in giro codice contenente tue userid
e password, qualcuno potrebbe leggerle con un decompilatore,
un debugger della tua applet, o simili trucchi -- e magari farti dei
brutti scherzi, se non altro sovrascrivendo arbitrariamente i file
a cui in questo modo gli permetti l'accesso...!
Alex

andarli fisicamente a scrivere da qualche parte.
E la telekoma me lo lascierebbe fare? Non credo proprio :-))))
Grazie mille ancora una volta per il tuo aiuto... spero proprio di riuscire
a finirla quest'applet... sarebbe una gran cosa per me...
Lone Wolf

Perche' non fai delle prove in locale, installando sul tuo computer o su uno
della intranet un "piccolo" (e gratis) WEB server tipo PSW?
Pino.

della intranet un "piccolo" (e gratis) WEB server tipo PSW?
L'idea non e' malvagia... il fatto e' che a questo progetto ci ho pensato
parecchio, ma solo negli ultimi giorni ho cominciato a scrivere il codice.
Adesso sarebbe anche pronto, quello che mi blocca sono sempre i permessi e
la sicurezza. Installando un Web Server sul mio PC potrei riuscire a farlo
girare modificando le protezioni... ma chi mi garantisce che poi girera' sul
server della Telecom? :-)
Lone Wolf

andarli fisicamente a scrivere da qualche parte.
C'e' una sola cosa che non mi convince:
perche' il server in questione DEVE essere quello dove hai la tua Home Page?
Hai detto che hai il server Unix dell'università a portata di mano, USALO e
fallo usare a tutti quelli che inseriranno la tua applet nel loro HTML.

fallo usare a tutti quelli che inseriranno la tua applet nel loro HTML.
Un'applet non puo` normalmente connettersi con un host diverso
da quello da cui e` stata scaricata -- sigh.
Alex

fallo usare a tutti quelli che inseriranno la tua applet nel loro HTML.
Beh, sono ancora alla fase alfa, sto facendo io da cavia :-)
Lone Wolf





da quello da cui e` stata scaricata -- sigh.
Beh, per me non e' un problema, basta farlo scrivere sullo stesso server...
tanto l'account ce l'ho... non potro' distribuire l'applet adf un gran
numero di persone (nel caso girasse...) ma se non altro avrei la
soddisfazione di aver fatto qualcosa di utile.
Lone Wolf

Alex
Un attimo!
Intanto non sono daccordo con il tuo commento poichè  immagino che il sigh
stia per 'purtroppo'.
Secondo me il modello di sicurezza di Java sul Web, con la sua serietà (ed
intransigenza) è uno dei motivi alla base del successo di Java.
Personalmente non gradirei che durante la connessione ad un server, il
codice java si collegasse ad un altro server. Certo potrebbe farlo dopo aver
ottenuto la convalida dell'utente, ma sarebbe troppo difficile da
implementare in modo serio e quindi sicuro (e poi in fin de conti non
necessario). A cosa potrebbe servire?  a dirottare le richieste nel caso il
server originario cadesse? mah!
Se vuoi, fammi sapere cosa ne pensi.
La mia osservazione riguardava il codice HTM, non certo Java (tutto non lo
conosco specialmente adesso con la versione 1.2, ma qualcosina....,
specialmente queste cose di base le ho provate).
Pensavo ad una pagina scaricata dal server A che contenesse un TAG
<applet> riferito ad un'applet scaricata dal server B.
esempio:
 <applet codebase="
http://serverB.dominio.net/user/myapplet/1.0
"
 code="GuestBook.class" width=400 height=75>
Questo si può fare, no?
A proposito io applet e form le traduco al femminile: sbaglio? disturbo
qualcuno?

qualcuno?
Anch'io ho sempre usato il femminile, in italiano, per applet,
form, application, e vari altri termini.
Alex


Spero di averti spiegato il mio punto di vista con quanto precede, per
riassumere: mi sono collegato col server A e voglio 'parlare' solo col
server A; se il servizio che fornisce server A è migliorabile attraverso
l'intervento di server B ci pensi server A a contattarlo e mi faccia sapere.
Pino.


Fatti una bella vacanza che java puo' aspettare.
Pino.

l'intervento di server B ci pensi server A a contattarlo e mi faccia sapere.
E per riassumere: non puoi farlo, l'HTML non funziona cosi` (la pagina
che scarichi dal server A puo` a sua volta scaricare applet e quant'altro
dai server B, C, D, e anche Z).  Visto che non funziona cosi` l'HTML, e
che quindi le varie applet che stai scaricando possono venire da dove
vogliono, e` puro spreco non permettere alle applet di connettersi con
server diversi da quello da cui sono state scaricate.
E questo e` clamorosamente ovvio a chi abbia anche solo una piccola
infarinatura di HTML, senza neppure scomodare ancora Java (di cui
pure, in teoria, su questo gruppo si dovrebbe parlare), e quindi fare
mostra, come tu fai, di non capirlo, legittima il dubbio "ce fai o ce sei"?
Alex

Alex
Ne' l'uno ne' l'altro semplicemente non parlavo di HTML, semplice no?
Una cosa non voglio farla cadere nel dimenticatoio, l'argomento della
'banda'. Mi è gia' capitato di parlare con persone che bollavano delle
soluzioni software, in particolare un piccolo escamotage dell'applicativo
Java ACS (Access Control Service)  della Cisco per aumentarne la sicurezza,
come troppo dispendiose in termini di 'banda'. Ma che vuol dire? secondo me
se uno vuole implementare delle funzioni necessariamente deve dedicarci
delle risorse, poi in progetto ben fatto a seconda delle situazioni si
sceglie se implementarle e quindi usare queste risorse o meno. Come si fa ad
individuare uno _SPRECO_ di banda in un sistema ideale? Il mio intervento
sulle soluzioni Client-Server a quattro strati effettivamente non ha preso
in considerazione lo spreco di banda, ma non poteva essere altrimenti visto
che era concentrato in una riga di testo!
Un ossequio a tutti i 'Prof' del NG, da parte di un 'imbecille' che continua
a postare per divertimento.
Pino.