Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54

    [JSP] Autenticazione su server e upload file

    Ciao a tutti, mi sono da poco imbattuto in un problemino riguardo l'upload di una immagine sul mio server tomcat, ho qualche domanda a riguardo

    Il primo dubbio mi è sorto leggendo questo topic:
    http://forum.html.it/forum/showthrea...readid=1438179

    E se io nel form volessi passare più informazioni oltre ai file ?
    Attualmente mi ritrovo un form con metodo "get" nella quale chiedo all'utente dati di tipo radio button,select,text e file. Se aggiungo ENCTYPE='multipart/form-data' e cambio il metodo da GET a POST dentro al form, che cosa mi restituiscono i campi rbutton select e text?

    Il secondo dubbio mi è invece sorto leggendo un pò in giro guide su come fare in JSP l'upload del file sul server.
    Mi riferisco specialmente a queste due guide:
    http://www.roseindia.net/jsp/file_up...pleFiles.shtml
    http://www.roseindia.net/jsp/file_up...ad.xhtml.shtml

    Non riesco a capire come effettuare il login sul server, cioè.. bene o male ho capito come fare per passare il file dal form alla pagina di salvataggio, ma in teoria non bisognerebbe prima eseguire l'autenticazione sul server per poi iniziare il passaggio di dati che permette il salvataggio del o dei file ?

  2. #2
    Se aggiungi ENCTYPE='multipart/form-data' e usi il post se il form avrà input di tipo file , text , select etc passerai tutto quindi i campi che avevi prima continueranno a funzionare ma adesso oltre a loro manderai anche un file.
    Per fare l'upload in jsp non ti serve autenticarti , la jsp viene trasformata a runtime in servlet quindi è come se facessi una jsp col form e una servlet.
    Il fatto della autenticazione è una scelta dello sviluppatore ossia se si vuole che per fare l'upload serva essere autenticati si sceglie quella strada ma non è obligatorio.
    Certo se non mi devo autenticare posso intasare il server di file etc perchè nessuno saprà chi ha inviato cosa ecco perchè si usa l'autenticazione.
    Prima cerca di capire l'upload poi l'autenticazione e infine li combini.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Grazie per la tempestiva risposta !
    comunque ho un altro problemino... cambiando il metodo in post e aggiungendo ENCTYPE='multipart/form-data' mi da un errore quando clicco il pulsante submit.
    Il form fa riferimento ad un'altra pagina in jsp dove inserisco il contenuto dei campi text rbutton e select all'interno di una tabella di un db, i campi della tabella sono tutti varchar, e ho gia controllato che non eccedano nella grandezza quando clicco su submit, posto il codice...

    Il mio form
    codice:
    msg="Inserisci un nuovo annuncio
    
    ";
                                   msg+="<form action=InserisciAnnuncio.jsp ENCTYPE='multipart/form-data' method=post onSubmit='return IsValidForm();' name=form1>";
                                   msg+="<table align=center class='sample'>";
                                   msg+="<tr><th>Sezione</th><td><input type=radio name=rbtSezione value=vendite checked>Vendite
    ";
                                   msg+="<input type=radio name=rbtSezione value=affitti>Affitti</td></tr>";
                                   msg+="<tr><td>";
                                   msg+="<tr><th>Tipologia</th><td><select name=menuTipologia style='width:344px'>";
                                   msg+="<option value=''>Seleziona una Tipologia</option>";
                                   msg+="<option value=Monolocale>Monolocale</option>";
                                   msg+="<option value=Bilocale>Bilocale</option>";
                                   msg+="<option value=Trilocale>Trilocale</option>";
                                   msg+="<option value=Quadrilocale>Quadrilocale</option>";
                                   msg+="<option value='Cinque vani o più'>Cinque vani o più</option>";
                                   msg+="</select>";
                                   msg+="</td></tr>";
                                   msg+="<tr><td>";
                                   msg+="<tr><th>Zona</th><td><select name=menuZona style='width:344px'>";
                                   msg+="<option value=''>Seleziona una Zona</option>";
                                   msg+="<option value='Mirafiori'>Mirafiori</option>";
                                   msg+="<option value='Santa Rita'>Santa Rita</option>";
                                   msg+="</select>";
                                   msg+="</td></tr>";
                                   msg+="<tr><th>Via</th><td><input type=text name=txtVia size='53' maxlength='50'></td></tr>";
                                   msg+="<tr><th>Descrizione</th><td>";
                                   msg+="<textarea name=txtDescrizione rows=10 cols=40 onkeyup="+apici+"limitText(this, 10);"+apici+" onchange="+apici+"limitText(this, 10);"+apici+"></textarea></td></tr>";
                                   msg+="<tr><th>Inserisci delle foto (max 9)</th><td><input type=file name=foto1 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto2 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto3 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto4 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto5 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto6 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto7 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto8 size='41'></td></tr>";
                                   msg+="<tr><th> </th><td><input type=file name=foto9 size='41'></td></tr>";
                                   msg+="<tr><td colspan=2 align=center><input type=submit name=invia value=Invia class='sbuttons'>";
                                   msg+="<input type=reset name =reset value=Cancella class='sbuttons' onClick="+apici+"return confirm('Sicuro di voler cancellare i dati inseriti?');"+apici+" > </td></tr> ";
                                   msg+="</table> </form>";
    out.print(msg);

    La pagina di riferimento (con la query sql)
    codice:
    String url = "jdbc:mysql://localhost:3306/miosito";
                                String user = utente.getValue();
                                String pw = pass.getValue();
    
                                Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    
                                dbConn = DriverManager.getConnection(url, user, pw);
                             
                                if(!dbConn.isClosed()) {
    
                                    String sezione=request.getParameter("rbtSezione");
                                    String tipologia=request.getParameter("menuTipologia");
                                    String zona=request.getParameter("menuZona");
                                    String via=request.getParameter("txtVia");
                                    String descrizione=request.getParameter("txtDescrizione");
                                    String im1=request.getParameter("foto1");
                                    String im2=request.getParameter("foto2");
                                    String im3=request.getParameter("foto3");
                                    String im4=request.getParameter("foto4");
                                    String im5=request.getParameter("foto5");
                                    String im6=request.getParameter("foto6");
                                    String im7=request.getParameter("foto7");
                                    String im8=request.getParameter("foto8");
                                    String im9=request.getParameter("foto9");
    
    
    
                                   String sql = "insert into "+sezione+" (Zona, Tipologia, Via, Descrizione, Image1, Image2, Image3, Image4, Image5, Image6, Image7, Image8, Image9";
                                           sql+= ") values ('"+zona+"','"+tipologia+"','"+via+"','"+descrizione+"','"+im1+"','"+im2+"','"+im3+"','"+im4+"','"+im5+"','"+im6+"','"+im7+"','"+im8+"','"+im9+"');";
                                          
                                     
                                            
                                            Statement statement = dbConn.createStatement();
                                            int esito = statement.executeUpdate(sql);
    
                                            if(esito==1)  {
                                            msg="Inserimento avvenuto con successo
    ";
                                    msg+="<form action=Gestione.jsp method=get name=form1>";
                                    msg+="<table align=center border=0>";
                                    msg+="<tr><th>
    
    
    
    Quali altre operazioni vuoi effettuare?</th></tr><tr><td align=center>";
                                    msg+="
    
    <input type=submit style='width:250px;' name=inputScelta value='Inserisci un nuovo annuncio'>
    ";
                                    msg+="
    <input type=submit style='width:250px;' name=inputScelta value='Elimina annunci in vendita'
    ";
                                    msg+="
    <input type=submit style='width:250px;' name=inputScelta value='Elimina annunci in affitto'</td></tr></table>";
                                    msg+="</form>";
                                    out.print(msg);
                                            }
                                            else out.print("
    Errore, Pagina scaduta.
    
     Clicca qui per continuare.");
                                    }

    L'errore che mi dà è questo:

    codice:
    type Exception report
    
    message
    
    description The server encountered an internal error () that prevented it from fulfilling this request.
    
    exception
    
    org.apache.jasper.JasperException: An exception occurred processing JSP page /InserisciAnnuncio.jsp at line 125
    
    122:                                  
    123:                                         
    124:                                         Statement statement = dbConn.createStatement();
    125:                                         int esito = statement.executeUpdate(sql);
    126: 
    127:                                         if(esito==1)  {
    128:                                         msg="Inserimento avvenuto con successo
    ";
    
    
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
    root cause
    
    javax.servlet.ServletException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null (Zona, Tipologia, Via, Descrizione, Image1, Image2, Image3, Image4, Image5,' at line 1
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    	org.apache.jsp.InserisciAnnuncio_jsp._jspService(InserisciAnnuncio_jsp.java:219)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
    root cause
    
    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null (Zona, Tipologia, Via, Descrizione, Image1, Image2, Image3, Image4, Image5,' at line 1
    	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
    	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
    	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
    	com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    	com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    	com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    	com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
    	com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
    	org.apache.jsp.InserisciAnnuncio_jsp._jspService(InserisciAnnuncio_jsp.java:179)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0-snapshot logs.

    a quanto ho capito.. il campo del radio button sezione riporta "null" ... come mai succede questo? non riesco a capire

  4. #4
    Non ho guardato il codice ma l'eccezione è nella sintassi Sql sembra che la variabile sezione arrivi null.
    Poi ricordati che foto1 ect sono file quindi li devi trattare come tali.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Ma non è possibile fare in modo di passare il percorso del file in una stringa anzichè passare tutto il file ?

  6. #6
    Ricordati che sei su un client e stai mandando il file su un sever , una volta salvato il file sul server certo puoi inserire nel DB il path di dove si trova il file e la classe File ti viene in aiuto con metodi come getAbsolutePath() getCanonicalPath() getName() etc.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Grazie dell'aiuto, hai perfettamente ragione
    Comunque ora mi ritrovo con un altro problema.. ma questo riguarda html, ho già postato un topic nuovo nella sezione html.
    Semplicemente settando l'enctype a multipart-form/data i miei campi text non vengono codificati e vengono automaticamente impostati come "null", sto cercando di risolvere questa cosa adesso..

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ti conviene dare una sistemata al codice finché sei in tempo. Innanzitutto, non serve a niente nelle JSP inserire il codice (X)HTML in una String e poi mandarla in stampa: chiudi il tag JSP
    codice:
    %>
    e scrivi tranquillo tutto l'XHTML. Quando serve andare a scrivere un valore che proviene da un'elaborazione, e quindi presumibilmente in qualche String o altro (JSP) riapri il tag, schiaffi in stampa la variabile e richiudi.

    Poi a livello di codice XHTML, gli attributi vanno valorizzati usando le virgolette (eviti brutte sorprese), ovvero:
    codice:
    <input type="file" name="tuofile" ... />
    e come ultima cosa, usa la notazione "array" per inviare più file:
    codice:
    <tr><td><input type="file" name="foto[]" .../></td></tr>
    <tr><td><input type="file" name="foto[]" .../></td></tr>
    ...
    <tr><td><input type="file" name="foto[]" .../></td></tr>
    In questo modo ti eviti anche altri problemi in fase di recupero dei file lato server.

    il tag TH che lasci sempre vuoto è l'intestazione della tabella, e come puoi immaginare si usa solo (con qualche senso) nella prima riga della tabella, per dare i titoli alle colonne... dalle altre parti non serve a niente, tranne che a generare codice semanticamente poco corretto.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Mi sorge un altro dubbio, girovagando per il web ho trovato qualcosa riguardo MultiPartRequest per recuperare dati da un form con enctype multipart-form/data.
    Ma tramite quest multipartrequest è possibile recuperare sia valori di tipo testuale che files ?

    Leggendo questa discussione ho letto qualcosa a proposito... ma non è spiegato come fare a recuperare dati dagli input di tipo TEXT

    http://forum.html.it/forum/showthread/t-1109603.html

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.