Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77

    form che passa valori nulli a servlet

    Ciao!
    Ho una pagina html che mi richiama nell'action di un form una servlet java. La servlet viene richiamata correttamente perchè in essa metto delle stringhe di prova da far visualizzare sul browser client e tutto è ok. Ora nella servlet passo a prelevare i valori che sono stati inviati col form (method="post"). Nel metodo doPost uso l'oggetto request.Parameter("nome") dove nella parentesi metto il valore dell'attributo name dei diversi campi del form. Ma perche request per tutti i valori mi ritorna null???? Ho anche altre servlet e con le altre questo problema non c'è.
    Voi avete qualche idea di come mai si passino valori nulli. Nel web.xml ho settato questa servlet nel modo giusto, altrimenti non verrebbe neanche lanciata no?
    Aiuto non so proprio da che parte girarmi....

  2. #2
    Così è un po' difficile dare un aiuto.
    Forse se scrivi la parte di codice del form e della servlet che ti dà problemi, si riesce a capire dov'è il problema.

    Ciao,

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77
    QUESTO è IL FILE .HTML CHE CONTIENE IL FORM
    <HTML>
    <HEAD>
    <LINK REL="stylesheet" TYPE="text/css" HREF="css/index.css" MEDIA="all" />
    <TITLE>
    PAGINA DI INSERIMENTO RISTORANTE
    </TITLE>
    </HEAD>
    <BODY bgcolor="#99FF99">
    <DIV ID="titolo_inserimento_ristorante">
    INSERISCI LE INFORMAZIONI DEL RISTORANTE DA AGGIUNGERE ALL'ARCHIVIO
    </DIV>
    <FORM id="form_inserimento_ristorante" METHOD="post" ACTION="servlets/inserimento_ristorante" TARGET="iframe_content" enctype= "multipart/form-data" >
    Nome: <INPUT TYPE="text" name="nome" id = "nome"/>

    Via: <INPUT TYPE="text" name="via" id="via" />

    Numero civico: <INPUT TYPE="text" name="numciv" id = "numciv"/>

    Città: <INPUT TYPE="text" name="città" id="città" />

    Area: <INPUT TYPE="text" name="area" id = "area"/>

    Telefono: <INPUT TYPE="text" name="telefono" id="telefono" />

    Sito internet: <INPUT TYPE="text" name="sito" id = "sito"/>

    Numero coperti: <INPUT TYPE="text" name="numcop" id="numcop" />

    Carte di credito accettate: <INPUT TYPE="text" name="carte" id = "carte"/>


    Foto: <INPUT TYPE="file" name="file" id="file" />


    <DIV ID="tipologia">
    <DIV ID="titoletto_tipologia">Tipologia</DIV>
    <INPUT TYPE="radio" name="tipologia" value="etnico"/>Etnico

    <INPUT TYPE="radio" name="tipologia" value="winbar"/>Win bar

    <INPUT TYPE="radio" name="tipologia" value="vegetariano"/>Vegetariano

    <INPUT TYPE="radio" name="tipologia" value="tradizionale"/>Tradizionale

    <INPUT TYPE="radio" name="tipologia" value="internazionale"/>Internazionale

    </DIV>
    <INPUT id = "invio_inserimento_ristorante" TYPE="submit" VALUE="Invia" />
    </FORM>
    </BODY>
    </HTML>

    QUESTO SOTTO INVECE è IL CODICE DELLA SERVLET

    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.io.File;
    import java.util.*;
    import java.text.*;
    import org.jdom.*;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import java.util.Iterator;
    import java.util.List;

    public class inserimento_ristorante extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/html");
    PrintWriter responseOutput = response.getWriter();
    StringBuffer buf = new StringBuffer();
    //RECUPERO LE INFORMAZIONI INVIATE DAL FORM MA SONO TUTTE NULLE
    String nome = request.getParameter("nome");
    String via = request.getParameter("via");
    String numciv =request.getParameter("numciv");
    String città =request.getParameter("città");
    String area =request.getParameter("area");
    String telefono =request.getParameter("telefono");
    String sito =request.getParameter("sito");
    String numcop =request.getParameter("numcop");
    String carte =request.getParameter("carte");
    String foto =request.getParameter("foto");
    String tipologia = request.getParameter("tipologia");
    //CONTROLLO SE ESISTE GIA' UN FILE .XML CON IL NOME DEL RISTORANTE INSERITO
    String pathdir = new String ("../webapps/restaurants/xml/" + città);
    String pathfile = new String ("../webapps/restaurants/xml/" + città + "/" + nome +".xml");
    buf.append(pathfile);
    File file = new File(pathdir);
    if (!file.exists()){
    file.mkdir();
    }
    file = new File(pathfile);
    if (file.exists()){
    buf.append("Un ristorante con tale nome è già presente in archivio dei ristoranti di questa città");
    }
    else{
    file.createNewFile();
    Element elementoRistorante = new Element("ristorante");
    Element elementoNome = new Element("nome");
    elementoNome.setText(nome);
    elementoRistorante.addContent(elementoNome);
    Element elementoVia = new Element("via");
    elementoNome.setText(via);
    elementoRistorante.addContent(elementoVia);
    Element elementoNumciv = new Element("numciv");
    elementoNome.setText(numciv);
    elementoRistorante.addContent(elementoNumciv);
    Element elementoCity = new Element("city");
    elementoNome.setText(città);
    elementoRistorante.addContent(elementoCity);
    Element elementoArea = new Element("area");
    elementoNome.setText(area);
    elementoRistorante.addContent(elementoArea);
    Element elementoTelefono = new Element("telefono");
    elementoNome.setText(telefono);
    elementoRistorante.addContent(elementoTelefono);
    Element elementoSito = new Element("sito");
    elementoNome.setText(sito);
    elementoRistorante.addContent(elementoSito);
    Element elementoNumcop = new Element("numcop");
    elementoNome.setText(numcop);
    elementoRistorante.addContent(elementoNumcop);
    Element elementoCarte = new Element("carte");
    elementoNome.setText(carte);
    elementoRistorante.addContent(elementoCarte);
    Element elementoFoto = new Element("foto");
    elementoNome.setText(foto);
    elementoRistorante.addContent(elementoFoto);
    Element elementoTipologia = new Element("tipologia");
    elementoNome.setText(tipologia);
    elementoRistorante.addContent(elementoTipologia);
    Document documento = new Document(elementoRistorante);
    XMLOutputter xmlOutputter = new XMLOutputter();
    //IL METODO SEGUENTE Format.getPrettyFormat() SERVE PER SCRIVERE SUL FILE XML IN MODO BEN FORMATTATO CON GLI A CAPO E LE INDENTAZIONI PER OGNI ELEMENTO, MA NON ME LO ACCETTA
    //xmlOutputter.setFormat(Format.getPrettyFormat());
    try{
    FileOutputStream fileOutputStream = new FileOutputStream(new File(pathfile));
    xmlOutputter.output(documento, fileOutputStream);
    }
    catch (FileNotFoundException ex){
    System.err.println(ex);
    }
    catch (IOException ex){
    System.err.println(ex);
    }
    }
    responseOutput.println(buf.toString());
    responseOutput.close();
    }
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quando scrivi codice, utilizza gli appositi tag [*CODE][*/CODE] (senza gli asterischi rossi che ho aggiunto io) così il codice rimane indentato ed è più facile leggerlo.

    Questo tag si attiva anche facendo clic sul pulsante [ # ] che trovi nella pagina di composizione del messaggio.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Il problema sta nell'attributo del form:

    codice:
    enctype="multipart/form-data"
    che ti permette di effettuare l'upload dell'immagine del ristorante. Infatti in questo modo stai inviando un documento multipart, che aggiunge dei boundary tra un parametro e l'altro. Per farla breve, questo comporta che il metodo getParameter() della request non funziona più.
    Per riuscire ad ottenere i parametri, puoi utilizzare questa libreria: http://www.servlets.com/cos/.
    Fai il download del file zip, lo scompatti e troverai un file, cos.jar, nella cartella lib. Aggiungi questa libreria al progetto java e in Tomcat, quindi, nel doPost fai qualcosa di questo tipo:

    codice:
    String imageDir = ...;
    MultipartRequest multipartRequest = new MultipartRequest( request, imageDir );
    String nome = multipartRequest.getParameter("nome");
    ..............
    In pratica, al posto dell'oggetto HttpServletRequest, utilizzi un MultipartRequest. Nel costruttore di quest'ultimo devi indicare la cartella in cui salvare l'immagine di cui fai l'upload.

    Ciao,

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77
    Ho fatto come mi hai detto, cioè ho scaricato la libreria, ho visto il percorso di dove ho zippato e di dove si trova esattamente il file .jar.
    Cosa significa aggiungere tale libreria al progetto e a Tomcat?
    Io lavoro complilando ancora i file .java con il prompt del dos e non uso un tool particolare come eclipse dove ho realizzato un progetto. Quindi penso che quello che intensi è semplicemente settare la variabile classoath di windows anche con il percorso per questa libreria?
    Io ho aggiunto il percorso anche per questo jar nella classpath dal pannello di controllo di window e ho riavviato il pc. Ma continua a dirmi, quando compilo la servlet, che il MultipartRequest non lo riconosce, è scritto giusto MultipartRequest (maiuscole e minuscole??) oppure devo indicare a qualcun altro questa libreria oltre al classpath???

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77
    CHE IDIOTA CHE SONO...Probabilmente oltre a settare la classpath devo fare l'import della libreria nella servlet,

    MA COSA DEVO IMPORTARE:
    import .......cos.jar?????

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77
    CE L'HO FATTA!!!
    Ripeto essendo alle prime armi non so le cose da subito ma con un pò di ingegno ho capito che quando scarico uno zip che rappresenta una libreria java questo contiene di solito la cartella lib con il .jar e la cartella classes con le classi. Gli import nei programmi java che usano tale libreria si fanno considerando il percorso all'interno della cartella classes esclusa fino alla cartella che contiene la classe che io uso nel mio programma.
    Scusate se CI ARRIVO TARDI NELLE COSE ...MA MEGLIO TARDI CHE MAI.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    77
    PRECISAZINE: scaricando e zippando un'altra libreria mi sono accorto che per definire gli import nei propi programmi java che usano tale libleria occorre (oltre che settare la classpath di ssitema) guardare all'interno della cartella scompattata dello zip e andare a vedere dove si trovano o i .java o i .class degli oggetti che ci servono e realizzare un percorso per gli import osservando tale struttuar di cartelle all'interno della cartella scompattata e non è sempre la stessa struttura. Nel senso che non esiste uno standard per chi fa delle librerie per l'organizzazione delle cartelle all'interno della struttura che contiene i file della libreria, quindi bisogna guardare tale struttura e andare a tentativi per definire un import che funzioni????? OPPURE ESISTE UN FILE ALL'INTERNO DI TALE STRUTTURA CHE SPIEGA DOVE SONO PRESENTI I FILE .JAVA O .CLASS CHE CI SERVONO PER DEFINIRE L'IMPORT E COME DEFINIRE IL PERCORSO PER ESSI?

  10. #10
    normalmente le librerie sono corredate di documentazione. Leggila!
    Ciao
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.