Risposta corta per chi non vuole capire:
all'interno della servlet inserisci il seguente codice
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
}
Risposta lunga:
Come ti dice chiaramente l'errore "HTTP Status 405 - ....." l'url richiamato dalla form action (la servlet) non supporta il metodo POST.
Quando crei una tua servlet non fai altro che usare il concetto di ereditarietà usando la keywords "extends". (Es. public class MiaServlet extends HttpServlet)
Ciò vuol dire,in soldoni, che la classe MiaServlet è in grado di fare tutto ciò che è in grado di fare la classe HttpServlet.
Quindi la prima domanda che devi porti è "Cosa sà fare HttpServlet di suo?", nello specifico è in grado di gestire una richiesta http con il metodo POST?
In realtà sembrerebbe che HttpServlet gestisce la richiesta POST, la gestisce infatti generando l'errore 405 e mostrando a video la descrizione dell'errore.
Se infatti guardiamo il codice sorgente di HttpServlet.java notiamo
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
365 throws ServletException, IOException
366 {
367 String protocol = req.getProtocol();
368 String msg = lStrings.getString("http.method_post_not_supported ");
369 if (protocol.endsWith("1.1")) {
370 resp.sendError(HttpServletResponse.SC_METHOD_NOT_A LLOWED, msg);
371 } else {
372 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
373 }
proprio come previsto.
Quindi bisogna riscrivere il metodo della classe HttpServlet all'interno di MiaServlet, per far ciò si ricorre al concetto di override del metodo. Diciamo al compilatore che MiaServlet intende migliorare (o cmq gestire a modo suo) l'implementazione del metodo doPost.
Tutto ciò detto in codice sorgente diventa:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//codice per gestire la richiesta POST
}
Riguardo il discorso di processRequest..
Partiamo dal presupposto che il ragionamento fatto per la richiesta POST vale per la richiesta GET con il corrispettivo metodo doGet.
Quando non è necessario differenziare la gestione del metodo di gestione di parametri (POST VS GET) è buona pratica usare un metodo unico, processRequest richiamato da doGet e doPost in modo da unificarne il codice.
quindi al posto di
//codice per gestire la richiesta POST
inserisci
processRequest(request, response);
------------------------------------------
>> P.S.(2) Quando si utilizzano gli Entity Beans non c'è bisogno di creare le tabelle del
>> database, vero?? Vangono create in automatico!!
Dipende..
la risposta è si, se nel persistence unit hai scelto come TableGenerationStrategy "Create" o "Drop and Create"
----------------------
http://programmaremobile.blogspot.com

Rispondi quotando