Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Servlet: Errore nell'action del form

    Ciao a tutti, devo fare un progretto universitario tramite utilizzo di servlet e pattern MVC.
    Ho guardato guide online e ho provato intanto a fare un lavoretto semplice, solo che dopo aver fatto il deploy su tomcat, al momento di premere INVIA, la seconda parte (di elaborazione e intabellamento dati) non viene trovata.
    Vi allego il codice:

    questo è il file java che elabora i dati (SimpleController)
    codice:
    package controller;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.RequestDispatcher;
    import business.User;
    import dati.UserIO;
    
    /**
    * Servlet implementation class for Servlet: SimpleController
    *
    */
    public class SimpleController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
    {
      /**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    
    /* (non-Java-doc)
       * @see javax.servlet.http.HttpServlet#HttpServlet()
       */
      public SimpleController()
      {
        super();
      }
      
      /* (non-Java-doc)
       * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
       */
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
      {
        String nome = request.getParameter("nome");
        String cognome = request.getParameter("cognome");
        String eta = request.getParameter("eta");
    
        User user = new User();
        user.setNome(nome);
        user.setCognome(cognome);
        user.setEta(eta);
        // Ricordarsi di creare la directory etc specificata!
        UserIO.addItem( user, "./webapps/MySimpleWebApplication/WEB-INF/etc/users.txt");
        
        HttpSession session = request.getSession();
        session.setAttribute("user", user);
        
        RequestDispatcher dispatcher;
        dispatcher = getServletContext().getRequestDispatcher(
              "/ShowUser.jsp");
        dispatcher.forward(request,response);
    
      }
      
      /* (non-Java-doc)
       * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
       */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
      {
        this.doGet(request, response);
      }
    }
    Mentre questo è il file html del form

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Inserimento Utente</title>
    </head>
    <body>
      <h1>Inserimento utente</h1>
      
    
    Per inserire un utente riempire i campi sottostanti. 
    
        Al termine,cliccare sul pulsante Invia.</p>
    
      <form action="SimpleController" method="get">
        <table cellspacing="5" border="0">
        <tr>
          <td align="right">Nome:</td>
          <td><input type="text" name="nome" /></td>
        </tr>
        <tr>
          <td align="right">Cognome:</td>
          <td><input type="text" name="cognome" /></td>
        </tr>
        <tr>
          <td align="right">Età:</td>
          <td><input type="text" name="eta" /></td>
        </tr>
        <tr>
          <td></td>
          <td>
    <input type="submit" value="Invia" /></td>
        </tr>
        </table>
      </form>
    </body>
    </html>
    non ho postato gli altri file perchè l'errore risiede nella comunicazione tra questi due... lo stesso Eclipse mi da errore alla riga dell'action del form, dicendo che SimpleController non esiste (ho provato con e senza estensioni)... ho provato ad usare un indirizzo assoluto a partire da C:/bla bla fino al file (ho provato a puntare sia al file java.class che al .java (quali dei 2 bisogna linkare?)) e ho anche provato a copiarli entrambi nella stessa cartella dove è presente il file html... ma nada de nada... eclipse continua a darmi errore, e sebbene riesca a generare il file .war per il deploy, nel momento del submit non parte la seconda parte!!!
    Qualche idea? Grazie mille per l'aiuto =)

  2. #2
    Controlla il tuo web.xml e vedi come la tua servlet è mappata, se non lo è mappala.
    Esempio di mappatura:
    codice:
    <servlet>
    		<servlet-name>Resources</servlet-name>
    		<servlet-class>
    			xxx.xxx.ResourcesServlet</servlet-class>
    		<init-param>
    			<param-name>expires</param-name>
    			<param-value>86400</param-value>
    		</init-param>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>Resources</servlet-name>
    		<url-pattern>/servlet/Resources</url-pattern>
    	</servlet-mapping>
    Con questa mappatura specifico che la mia Servlet xxx.xxx.ResourcesServlet dovra rispondere alle richieste inviate all'indirizzo http://xxx/<Context Root>/servlet/Resources

  3. #3
    Mmmm... ho notato ora una cosa.
    Ho seguito la guida "Usare Eclipse per applicazioni Web" sempre di html.it, e al momento di generare il deployment descriptor dice che viene generato automaticamente facendo doppio clic nel project explorer. Cosa che io ho fatto però il mio file generato web.xml è diverso da quello che dovrebbe venire. infatti manca l'intera parte di servlet e servlet mapping... non credo di aver fatto errori perchè alla fine ho seguito alla lettera la guida... boh!!!
    Questo è il mio web.xml

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
      <display-name>BD</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    effettivamente è un po' diverso dal tuo e non indica nulla della servlet... se io lo sostituisco col tuo cambiando opportunamente il path funzionerà???

    Poi devo vedere come mai sto coso automatico che genera il .xml non va... :O
    Grazie mille intanto!!! =)

  4. #4
    Io sono sempre dell'avviso che gli IDE dovrebbero essere proibite ai newbie finchè non imparano effettivamente tutto quello che l'IDE genera in maniera "automatica".
    Dico questo perchè se sarebbe capitato a me, anche io uso eclipse ed ormai sono assuefatto dagli automatismi che questa IDE di mette a disposizione, la prima cosa che sarei andato a controllare è appunto il web.xml dato che quando ho imparato io ho usato notepad e tanta, tanta pazienza....
    Cmq il problema è appunto il fatto che manca il mapping della servlet ti basterà aggiungerlo per ottenere il risultato sperato.

  5. #5
    Originariamente inviato da francesco.muia
    codice:
    	<servlet-mapping>
    		<servlet-name>Resources</servlet-name>
    		<url-pattern>/servlet/Resources</url-pattern>
    	</servlet-mapping>
    scusa ma così indichi che dentro alla cartella /servlet/Resources c'è il tuo file java che fa da servlet?

    io ho provato modificando l'impossibile e ancora mi resta sto dannato errore...
    ho modificato il mio xml così:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
      <display-name>BD</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
    		<servlet-name>SimpleController</servlet-name>
    		<servlet-class>
    			controller.SimpleController</servlet-class>
    		<init-param>
    			<param-name>expires</param-name>
    			<param-value>86400</param-value>
    		</init-param>
      </servlet>
      <servlet-mapping>
    		<servlet-name>SimpleController</servlet-name>
    		<url-pattern>C:\Users\user\workspace\BD\src\controller</url-pattern>
      </servlet-mapping>
    </web-app>
    questa è stata l'ultima prova, inserendo addirittura l'intero uri. Dentro alla cartella controller si trova il file SimpleController.java, la mia servlet ma nonostante ciò nada... ho provato a mettere l'uri anche del file .class e niente... T_T ho riguardato appunti dell'uni ma non ho niente che mi possa aiutare per questa cosa... più che altro mi sembra strano perchè ho seguito alla lettera la guida e ottengo cose diverse :-\.
    ho copiato entrambi i file .java e .class nella stessa cartella dove ho l'html index e ancora niente... ho un index orbo

  6. #6
    Allora.... Da dove cominciare....
    Struttura di un applicazione web java (J2EE):
    codice:
    --> WebContent
       --> pagine jsp, html etc..
       --> web-inf //cartella configurazione e contenitore delle classi
           -->classes //qui andranno tutte i file .class della tua applicaizione compreso le servlet
           -->lib //eventuali librerie usate...
       -->web.xml
    Ora in eclipse avrai anche la cartellina src in cui ci sono tutti i file .java ovviamente dentro i vari package, eclipse in automatico ti mette i .class di questi file dentro la cartella webcontent->web-inf->classes. Ovviamente la tua servlet.java dovrà essere all'interno della cartella src e servlet.class dovrà essere dentro la cartella src (ovviamente se è dentro un package la vedrai legata a quest'ultimo).

    Mapping.....
    Supponendo che la tua servlet si chiami SimpleController è che questa sia contenuta nel package controller (in src vedra controller e dentro SimpleController).
    codice:
     <servlet>
    		<servlet-name>SimpleController</servlet-name>
    		<servlet-class>
    			controller.SimpleController</servlet-class>
      </servlet>
    Con questo codice dici a j2ee che esiste un servlet (controller.SimpleController) e che ti riferirai ad essa con il nome "SimpleController" (questo nome serve solo a livello di configurazione).
    codice:
    <servlet-mapping>
    		<servlet-name>SimpleController</servlet-name>
    		<url-pattern>/SimpleControllerInd</url-pattern>
      </servlet-mapping>
    Con questo codice invece indichi che la tua servlet "SimpleController" (il servlet-name che hai scritto sopra...) dovrà rispondere all'url relativo /SimpleControllerInd.

    URL RELATIVO...
    Vuoldire che la tua servlet risponderà come avevo detto in precedenza all'indirizzo:
    http://xxx/<Context Root>/SimpleControllerInd
    Esempio
    se sto usando il mio tomcat in locale sulla porta 8080 e se la mia context root è uguale a "MiaApplicazione" allora l'indirizzo per richiamare la servlet sarà
    http://localhost:8080/MiaApplicazion...eControllerInd

    Spero di essere stato chiaro, ma soprattutto utile.

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.