Problema comunicazione jsp-servlet-oracleSQL Developer

di il
12 risposte

Problema comunicazione jsp-servlet-oracleSQL Developer

Salve a tutti, sono nuovo nel forum e spero di non aver sbagliato sezione , e sto studiando da poco tecnologie per i web database
avevo già letto un articolo simile sul forum me non ho trovato le risposte che cercavo...

praticamente ho una jsp con un semplice form per l'inserimento dei dati :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registra Cliente</title>
</head>
<body>
<form name="NuovoCliente" action="/NuovoCliente" method="get">

id Cliente: <input type="text" name="id_Cliente" value=""><br>

Nome: <input type="text" name="nome" value=""><br>

Cognome:<input type="text" name="cognome" value=""><br>

C.F. :<input type="text" name="CF" value=""><br>

P.IVA :<input type="text" name="PIVA" value=""><br>

Email :<input type="text" name="email" value=""> <br>

Fedeltà :<input type="text" name="fedeltà" value=""><br>

Via :<input type="text" name="via" value=""><br>

civico :<input type="text" name="civico" value=""><br>

password : <input type="password" name="password" value=""><br>

<input type="submit" value="Aggiungi">

</form>
</body>
</html>
collegata a una servlet che dovrebbe salvare i dati sul mio DB oracle:

@WebServlet({"/NuovoCliente","/NuovoCliente.jsp"})
public class NuovoCliente extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public NuovoCliente() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		ClienteDAO d=new ClienteDAO();
		
		int idCliente=Integer.parseInt(request.getParameter("id_Cliente"));
		String nome=request.getParameter("nome");
		String cognome=request.getParameter("cognome");
		String partitaIva=request.getParameter("PIVA");
		String codiceFiscale=request.getParameter("CF");
		String email=request.getParameter("email");
		int fidelity=Integer.parseInt(request.getParameter("fedeltà"));
		String via=request.getParameter("via");
		int numerocivico = Integer.parseInt(request.getParameter("civico"));
		String password=request.getParameter("password");
		

		Cliente cliente=new Cliente(idCliente,nome,cognome,partitaIva,codiceFiscale, email,fidelity,via,numerocivico,password);

		d.salvaCliente(cliente);

		
		response.getWriter().append("Utente aggiunto").append(request.getContextPath());
	}


il problema è che quando lancio la jsp dal server mi compare questo errore:

HTTP Status 500 – Internal Server Error


Type Exception Report

Message null

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
it.unirc.twd.BuyeDrink.servlet.NuovoCliente.doGet(NuovoCliente.java:37)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Note The full stack trace of the root cause is available in the server logs.


siccome in un altro progetto ho una servlet praticamente identica(a quanto ho capito il problema è la stringa vuota) e funzionante non capisco perché questa non debba andare, grazie in anticipo ...

12 Risposte

  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Innanzitutto quando si invia un form (e specialmente se è per un "inserimento" o "aggiornamento") sarebbe meglio farlo in POST e non in GET.

    Ma a parte questo il problema è che viene passato al parseInt un valore null. Se uno dei getParameter() dà un null è perché il parametro manca proprio nella request.

    A vista mi pare siano tutti corrispondenti tra jsp e Servlet. Ma c'è una questione, la "a" accentata in getParameter("fedeltà"). Cerca di evitare caratteri particolari nei nomi di parametri. Metti quindi "fedelta" senza accento.

    Tieni comunque presente che i campi fedelta e civico NON devono restare vuoti. Se sono vuoti, hai una stringa vuota "" e parseInt lancia NumberFormatException anche in questo caso.
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Ho corretto fedeltà, tuttavia l'errore persiste ...
    se ho capito bene , il problema è che i value del form a cui sono associati gli Integer.Parseint() contengono le virgolette quindi vengono assiciati dei valori nulli , tuttavia ho una servlet simile in un altro progetto in cui il value di matricola è vuoto ed è associato a un Parseint nella servlet... è perfettamente funzionante...
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Repa235 ha scritto:


    il problema è che i value del form a cui sono associati gli Integer.Parseint() contengono le virgolette
    Integer.parseInt lancia NumberFormatException sicuramente se il suo argomento è null o stringa vuota (""). E ovviamente se la stringa non è un numero intero valido parsabile.
    Quindi niente virgole, punti, virgolette, ecc...
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    andbin ha scritto:


    Repa235 ha scritto:


    il problema è che i value del form a cui sono associati gli Integer.Parseint() contengono le virgolette
    Integer.parseInt lancia NumberFormatException sicuramente se il suo argomento è null o stringa vuota (""). E ovviamente se la stringa non è un numero intero valido parsabile.
    Quindi niente virgole, punti, virgolette, ecc...
    Scusami allora che soluzione posso adottare per l'inserimento numerico dal form?
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Repa235 ha scritto:


    Scusami allora che soluzione posso adottare per l'inserimento numerico dal form?
    Ma Integer.parseInt è valido come soluzione. Solo che appunto: *il parametro ci DEVE essere (non null), *non deve essere stringa vuota (""), *deve essere un intero valido.

    Se vuoi che il valore sia "opzionale" (cioè che si possa lasciare il campo vuoto), allora DEVI fare tu un controllo lato Servlet: se vuoto setta un valore di default es. 0
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Perdonami ma non capisco perchè questa combinazione servlet - JSP non debba funzionare mentre queste due funzionano alla perfezione .

    JSP:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <form method="get" action="/AggiungiStudente">
    <table style="height: 400px; width: 598px;border: 1">
    <tbody>
    <tr>
    <td style="width: 118px;">&nbsp;Matricola:</td>
    <td style="width: 473px;">&nbsp;<input type="text" name="matricola" value=""></td>
    </tr>
    <tr>
    <td style="width: 118px;">&nbsp;Nome:&nbsp;</td>
    <td style="width: 473px;">&nbsp;<input type="text" name="nome" value=""></td>
    </tr>
    <tr>
    <td style="width: 118px;">&nbsp;Cognome:</td>
    <td style="width: 473px;">&nbsp;<input type="text" name="cognome" value=""></td>
    </tr>
    <tr>
    <td style="width: 118px;">&nbsp;Password:</td>
    <td style="width: 473px;">&nbsp;<input type="password" name="password" value=""></td>
    </tr>
    <tr>
    <td style="width: 118px;">IdCdl:</td>
    <td style="width: 473px;">&nbsp;<input type="text" name="idcdl" value=""></td>
    </tr>
    </tbody>
    </table>
    
    
    			<input type="submit" value="Aggiungi">
    </form>			
    
    </body>
    </html>



    Servlet:
    @WebServlet({ "/AggiungiStudente", "/AggiungiStudente.jsp" })
    public class AggiungiStudente extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public AggiungiStudente() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		
    		StudenteDAO dao = new StudenteDAO();
    		String matricola = request.getParameter("matricola");
    		String nome = request.getParameter("nome");
    		String cognome = request.getParameter("cognome");
    		String password = request.getParameter("password");
    		String idcdl = request.getParameter("idcdl");
    		
    		Studente s = new Studente(Integer.parseInt(matricola),nome,cognome,password,Integer.parseInt(idcdl));
    		
    		dao.salvaStudente(s);		
    		
    		response.sendRedirect("/VisualizzaStudente");
    		
    		response.getWriter().append("Utente aggiunto").append(request.getContextPath());
    	}

    apparte il redirect e la sessione non noto alcuna differenza tra quella di prima e questa , eppure anche qui troviamo il Parseint e la stringa vuota ... eppure questa funziona alla perfezione
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Repa235 ha scritto:


    Integer.parseInt(matricola)
    Integer.parseInt(idcdl)

    eppure anche qui troviamo il Parseint e la stringa vuota ... eppure questa funziona alla perfezione
    Se matricola e idcdl sono stringhe vuote ("") ovvero il campo è lasciato vuoto, NON può funzionarti neanche qui.
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    andbin ha scritto:


    Repa235 ha scritto:


    Integer.parseInt(matricola)
    Integer.parseInt(idcdl)

    eppure anche qui troviamo il Parseint e la stringa vuota ... eppure questa funziona alla perfezione
    Se matricola e idcdl sono stringhe vuote ("") ovvero il campo è lasciato vuoto, NON può funzionarti neanche qui.
    eppure credimi lanciandola dal server inserisce i dati all'interno del database collegato in oracle sono tre giorni che ci sto ragionando , sto ammattendo
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Repa235 ha scritto:


    eppure credimi lanciandola dal server inserisce i dati all'interno del database collegato in oracle sono tre giorni che ci sto ragionando , sto ammattendo
    Debugga, fermati prima della creazione dello Studente e dimmi cosa valgono matricola e idcdl. Poi esegui la riga del new Studente ma se quei campi sono "" il parseInt si schianta di certo prima.
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Il discorso è che se faccio run , la jsp si apre , naturalmente nel form inserisco 001 e la servlet lo collega al database

    per quella di cliente nemmeno si apre la jsp
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Ho trasformato il metodo in post rendendo la JSP:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Registra Cliente</title>
    </head>
    <body>
    
    
    <form name="NuovoCliente" action="/NuovoCliente" method="post">
    
    id Cliente: <input type="text" name="idCliente" value=""><br>
    
    Nome: <input type="text" name="nome" value=><br>
    
    Cognome:<input type="text" name="cognome" value=""><br>
    
    P.IVA :<input type="text" name="PIVA" value=""><br>
    
    Email :<input type="text" name="email" value=""> <br>
    
    C.F. :<input type="text" name="CF" value=""><br>
    
    Fedeltà :<input type="text" name="fedelta" value=""><br>
    
    Via :<input type="text" name="via" value=""><br>
    
    civico :<input type="text" name="civico" value=""><br>
    
    password : <input type="password" name="password" value=""><br>
    
    <input type="submit" value="Aggiungi">
    
    </form>
    </body>
    </html>

    e la servlet in :
    @WebServlet({"/NuovoCliente" , "/NuovoCliente.jsp"})
    public class NuovoCliente extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public NuovoCliente() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	
    		ClienteDAO d=new ClienteDAO();
    
    		String idCliente=request.getParameter("idCliente");
    		String nome=request.getParameter("nome");
    		String cognome=request.getParameter("cognome");
    		String partitaIva=request.getParameter("PIVA");
    		String email=request.getParameter("email");
    		String codiceFiscale=request.getParameter("CF");
    		String fidelity=request.getParameter("fedelta");
    		String via=request.getParameter("via");
    		String numerocivico = request.getParameter("civico");
    		String password=request.getParameter("password");
    
    
    		Cliente cliente=new Cliente(Integer.parseInt(idCliente),nome,cognome,partitaIva,codiceFiscale, email,Integer.parseInt(fidelity),via,Integer.parseInt(numerocivico),password);
    
    		d.salvaCliente(cliente);
    
    
    		response.getWriter().append("Utente aggiunto").append(request.getContextPath());
    		
    		
    	}
    
    }
    

    adesso l'errore è :
    
    HTTP Status 405 – Method Not Allowed
    
    
    Type Status Report
    
    Message HTTP method GET is not supported by this URL
    
    Description The method received in the request-line is known by the origin server but not supported by the target resource.
    
  • Re: Problema comunicazione jsp-servlet-oracleSQL Developer

    Repa235 ha scritto:


    adesso l'errore è :
    
    HTTP Status 405 – Method Not Allowed
    
    Scusa ma ... la richiesta iniziale della pagina jsp passa per la servlet?

    In questi casi, avendo la Servlet "davanti" a tutte le richieste di quella pagina, generalmente/tipicamente si fa:
    - il doGet prepara (eventualmente) i dati della pagina e poi fa un forward alla jsp (che tipicamente/possibilmente è nascosta sotto WEB-INF).
    - il doPost riceve il submit del form, se va tutto bene fa quello che serve. Se va male, fa un forward alla jsp dove si possono rimettere i dati (magari errati).


    P.S. continuo a ripetere che se un campo è vuoto e quindi il getParameter da "" (stringa vuota) se lo passi al parseInt si SCHIANTA con NumberFormatException.
Devi accedere o registrarti per scrivere nel forum
12 risposte