Errore nel invio dei dati alla servlet.

di il
11 risposte

Errore nel invio dei dati alla servlet.

Salve sto tentando di realizzare questa piccola applicazione web:

1) Creare un menu che tramite iperlink permette la navigazione su due pagine jsp:
Inserisci Cantante
Modifica Cantante
3) la pagina esitoModifica.jsp consente di visualizzare semplicemente: “Sito in costruzione”
4) La pagina insCantante.jsp “chiama la ServletController e quest’ultima stampa i dati tramite
la pagina jsp “esitoInserimento”.
In ques’ultima vengono visualizzati i dati del cantante inseriti e un messaggio: “dati inseriti correttamente”.

In verità, quando inserisco i dati di un cantante nel form ed invio, esce sulla pagina web l'errore:
HTTP Status 500 - Internal Server Error.

Questo è il codice del form per l'inserimento del cantante: [CODE]: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Inserimento cantante</title> </head> <body> <center> <h1>Inserimento cantante</h1> <p> <form name="inserimento" method="get" action="./ServletController?azione=3"> <p>Inserire il nome del cantante: <input type="text" name="nome" size="30"> <p>Inserire il cognome del cantante: <input type="text" name="cognome" size="30"> <p> Cliccare sul tasto INVIA per trasmettere i dati, oppure sul tasto RESET per anullare i valori dei campi <p><input type="submit" value="invia" name="botton1"> <input type="reset" value="cancella" name="botton2"> </form> </center> </body> </html> Questo invece e il codice della servlet: [CODE]: package pkg1; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; /** * Servlet implementation class ServletController */ @WebServlet("/ServletController") public class ServletController extends HttpServlet { private static final long serialVersionUID = 1L; final int INSERIMENTO = 1; final int MODIFICA= 2; final int ESITO_INSERIMENTO=3; /** * @see HttpServlet#HttpServlet() */ public ServletController() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd; String action = request.getParameter("azione"); int azione = Integer.valueOf(action).intValue(); if(azione==INSERIMENTO) { rd=request.getRequestDispatcher("insCantante.jsp"); rd.forward(request, response); } else if(azione==MODIFICA) { rd=request.getRequestDispatcher("esitoModifica.jsp"); rd.forward(request, response); } else if(azione==ESITO_INSERIMENTO) { String nomeCantante=request.getParameter("nome"); request.setAttribute("nome", nomeCantante); String cognomeCantante=request.getParameter("cognome"); request.setAttribute("cognome", cognomeCantante); rd=request.getRequestDispatcher("esitoInserimento.jsp"); rd.forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } E questo è il codice della pagina jsp esitoInserimento: [CODE]: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Esito inserimento.</title> </head> <body> <center> <% String nomeCantante=(String)request.getAttribute("nome");%> <%String cognomeCantante=(String)request.getAttribute("cognome");%> <h1>Dati inseriti correttamente:</h1> <h2><%System.out.println(nomeCantante+" "+cognomeCantante); %></h2> </center> </body> </html> Non ho capito dove ho sbagliato.

11 Risposte

  • Re: Errore nel invio dei dati alla servlet.

    mark13 ha scritto:


    In verità, quando inserisco i dati di un cantante nel form ed invio, esce sulla pagina web l'errore:
    HTTP Status 500 - Internal Server Error.
    È un po' poco, detto così ..... guarda il log del server e verifica quale è la causa effettiva.

    E siccome hai usato url "relativi" es. ./ServletController allora verifica bene quale url viene richiesto al server e come sono "mappate" le servlet.
  • Re: Errore nel invio dei dati alla servlet.

    ServletController mi permette di accedere a tutte le pagine jsp che ho creato tranne alla pagina esitoInserimento.jsp. Forse l'errore sta nel
    else if (azione==ESITO_INSERIMENTO). Ma a me mi pare tutto giusto: [CODE]: : package pkg1; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; /** * Servlet implementation class ServletController */ @WebServlet("/ServletController") public class ServletController extends HttpServlet { private static final long serialVersionUID = 1L; final int INSERIMENTO = 1; final int MODIFICA= 2; final int ESITO_INSERIMENTO=3; /** * @see HttpServlet#HttpServlet() */ public ServletController() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd; String action = request.getParameter("azione"); int azione = Integer.valueOf(action).intValue(); if(azione==INSERIMENTO) { rd=request.getRequestDispatcher("insCantante.jsp"); rd.forward(request, response); } else if(azione==MODIFICA) { rd=request.getRequestDispatcher("esitoModifica.jsp"); rd.forward(request, response); } else if(azione==ESITO_INSERIMENTO) { String nomeCantante=request.getParameter("nome"); request.setAttribute("nome", nomeCantante); String cognomeCantante=request.getParameter("cognome"); request.setAttribute("cognome", cognomeCantante); rd=request.getRequestDispatcher("esitoInserimento.jsp"); rd.forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
  • Re: Errore nel invio dei dati alla servlet.

    mark13 ha scritto:


    ServletController mi permette di accedere a tutte le pagine jsp che ho creato tranne alla pagina esitoInserimento.jsp. Forse l'errore sta nel
    else if (azione==ESITO_INSERIMENTO). Ma a me mi pare tutto giusto:
    Non vedo nulla di "palesemente" errato. Attenzione solo ad una cosa (in generale), il getRequestDispatcher della request può ricevere una specifica assoluta o relativa. La documentazione ufficiale è, direi, chiara:
    - If the path begins with a "/" it is interpreted as relative to the current context root.
    - If it is relative, it must be relative against the current servlet.


    Comunque, ripeto, verifica sul log e vedi esattamente COSA ha causato lo status 500.
  • Re: Errore nel invio dei dati alla servlet.

    Per log intendi questo:
    Allegati:
    30668_508daf472f332278866df6c4aa8e0410.png
    30668_508daf472f332278866df6c4aa8e0410.png
  • Re: Errore nel invio dei dati alla servlet.

    mark13 ha scritto:


    Per log intendi questo:
    Sì, l'errore è nel punto:

    int azione = Integer.valueOf(action).intValue();

    verifica perché la stringa action è null, ovvero perché non prende il parametro "azione".
  • Re: Errore nel invio dei dati alla servlet.

    Strano che l'errore sia su quella riga della ServletController. Allora perchè mi permette di fare inserimento o modifica: [CODE]: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Cantante</title> </head> <body> <center> <H1> Cantante </H1> <A HREF=./ServletController?azione=1>Inserisci</A> <BR><BR> <A HREF=./ServletController?azione=2>Modifica</A> </center> </body> </html>
  • Re: Errore nel invio dei dati alla servlet.

    Risolto. In pratica la pagina insCantante.jsp non passa parametri alla ServletController oltre ai valori dei campi del form. Ho riscritto la ServletController in questo modo: [CODE]: package pkg1; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; /** * Servlet implementation class ServletController */ @WebServlet("/ServletController") public class ServletController extends HttpServlet { private static final long serialVersionUID = 1L; final int INSERIMENTO = 1; final int MODIFICA= 2; /** * @see HttpServlet#HttpServlet() */ public ServletController() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd; String action = request.getParameter("azione"); if(action!=null) { int azione = Integer.valueOf(action).intValue(); if(azione==INSERIMENTO) { rd=request.getRequestDispatcher("insCantante.jsp"); rd.forward(request, response); } else if(azione==MODIFICA) { rd=request.getRequestDispatcher("esitoModifica.jsp"); rd.forward(request, response); } } else { String nomeCantante=request.getParameter("nomeCantante"); request.setAttribute("nomeCantante", nomeCantante); String cognomeCantante=request.getParameter("cognomeCantante"); request.setAttribute("cognomeCantante", cognomeCantante); rd=request.getRequestDispatcher("esitoinserimento1.jsp"); rd.forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
  • Re: Errore nel invio dei dati alla servlet.

    mark13 ha scritto:


    Ho riscritto la ServletController in questo modo:
    Hai risolto "male" nel modo sbagliato. Il punto è che se hai una servlet "unica" con nel tuo caso, dovresti sempre passare un parametro "azione". L'assenza di azione non dovrebbe "mai" capitare. Se capitasse, dovrebbe essere il sintomo di un "baco" che ovviamente devi correggere.

    E sono andato a leggere la documentazione su HTML. Se hai un: action="./ServletController?azione=3" questo è malformato, perché quel azione=3 semplicemente sparisce.

    Quindi risolvi nel modo corretto.
  • Re: Errore nel invio dei dati alla servlet.

    Salve andbin. La pagina jsp insCantante passa parametri alla ServletController solo tramite i campi del form. Purtroppo non ho trovato un modo affinchè la pagina jsp insCantante passi il parametro "azione" alla ServletController.
  • Re: Errore nel invio dei dati alla servlet.

    mark13 ha scritto:


    Salve andbin. La pagina jsp insCantante passa parametri alla ServletController solo tramite i campi del form. Purtroppo non ho trovato un modo affinchè la pagina jsp insCantante passi il parametro "azione" alla ServletController.
    <form name="inserimento" method="get" action="./ServletController">
    <input type="hidden" name="azione" value="3">
    .......
  • Re: Errore nel invio dei dati alla servlet.

    Salve andbin, grazie. Io mi ero fissato di trovare qualche attributo nel tag form, per inviare il parametro "azione" alla ServletController, e non avevo pensato al tag input.
Devi accedere o registrarti per scrivere nel forum
11 risposte