Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Eclipse - Servlet] non funziona servlet

    Ciao a tutti,
    Sto studiando servlet e jsp. Ho installato Tomcat come da guida ma sto diventando pazzo perché non riesco ad eseguire una stupidissima servlet. Ho seguito anche la guida html che parla di eclipse e tomcat ma senza risultati. Dei seguenti codici si apre la pagina html ma quando premo il pulsante HTTP Status 404.
    Questa è la pagina Html che si visualizza
    codice:
    <html>
    
    <head>
       <title> Handling an HTTP Get Request </title>
    </head>
    
    <body>
       <form action = "http://127.0.0.1:8080/jhtp5/WelcomeServlet" method = "get">
    
    	
    
    <label>Clicca sul pulsante per invocare la servlet
    	   <input type = "submit" value = "Get Html Document" />
    	</label></p>
    
       </form>
    </body>
    </html>
    questa è la servlet che invece non funziona.
    codice:
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    
    public class WelcomeServlet extends HttpServlet {
    
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
    	throws ServletException, IOException {
    	
    	response.setContentType("text/html");
    	PrintWriter out = response.getWriter();
    	
    	out.println("<html>");
    	out.println("<head>");
    	out.println("<title> Un Semplice Servlet </title>");
    	out.println("</head>");
    
    	out.println("<body>");
    	out.println("<h1>Welcome to Servlets!</h1>");
    	out.println("</body>");
    
    	out.println("</html>");
    	out.close();
    	}
    }
    vi ringrazio in anticipo per l'aiuto

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    HTTP Status 404 significa che la risorsa non esiste.
    Per capire cosa stai facendo di sbagliato bisognerebbe avere qualche informazione in più:

    1) Il codice della servlet che hai postato non contiene l'indicazione di package: in JEE, ed in particolar modo nelle WebApp, è obbligatorio avere almeno un package.

    2) Non hai postato il file web.xml per capire come è configurata la WebApp

    3) Non hai detto come/dove hai effettuato il deploy dell'applicazione

    4) Non hai postato eventuali log di Tomcat, che possono tornare utili per capire il problema

    Guardando quello che hai postato non vedo errori, a parte la mancanza del package nella servlet.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    Ciao...grazie per la risposta

    1-2) tutti i codici l'ho presi da un libro. Anche quello del file web.xml che non ho postato perché dato che non funzionava inserendo i file nella cartella webapps, ho seguito questa
    guida html sull'utilizzo di tomcat e eclipse e ho deciso di provare a usarlo e ho letto che il file web.xml lo fa in automatico eclipse (ho messo la spunta durante la creazione di un nuovo dinamic web project)

    3) Ho provato in tutti i modi. Ho provato a creare il file war, ad avviarlo da eclipse come server, e a inserire il file html dentro la cartella di tomcat webapps/jhtp5, il file web.xml dentro la cartella webapps/jhtp5/WEB-INF e il file .class dentro webapps/jhtp5/WEB-INF/classes.
    Parte la pagina html ma non cliccando sul pulsante dà quell'errore.

    4) non ho preso i log casomai se servono li posto più tardi

    Ho anche seguito la guida application server ma dalle servlet in poi non funziona.
    Grazie per l'aiuto

  4. #4

    ho aggiunto il controller...

    ho riprovato ma niente...la servlet non viene invocata...nei log di tomcat non compare nulla...ecco il file web.xml creatomi da Eclipse che è totalmente diverso da quello che del libro...(ho provato a sostituirlo ma non parte nemmeno la pagina html)
    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" id="WebApp_ID" version="3.0">
      <display-name>jhtp5</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>

  5. #5

    ...

    ...se puo' esserti utile posso dirti che ho seguito passo passo questa guida e ho lo stesso problema. Si apre la pagina html quando premo il pulsante per inviare i dati non trova la servlet. Se carico la pagina jsp funziona e il pulsante che mi riporta alla pagina html dell'inserimento funziona. Il problema riguarda solamente il caricamento delle servlet. Forse ho sbagliato a configurare qualcosa di Tomcat?

  6. #6

    questa i messaggi della console di eclipse all'avvio di quest'ultima applicazione

    codice:
    feb 20, 2013 2:08:20 AM org.apache.catalina.core.AprLifecycleListener init
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Programmi\Java\jre7\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Programmi/Java/jre7/bin/client;C:/Programmi/Java/jre7/bin;C:/Programmi/Java/jre7/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programmi\eclipse jee;;.
    feb 20, 2013 2:08:21 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:MySimpleWebApplication' did not find a matching property.
    feb 20, 2013 2:08:21 AM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-bio-8080"]
    feb 20, 2013 2:08:21 AM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
    feb 20, 2013 2:08:21 AM org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 1493 ms
    feb 20, 2013 2:08:22 AM org.apache.catalina.core.StandardService startInternal
    INFO: Starting service Catalina
    feb 20, 2013 2:08:22 AM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.35
    feb 20, 2013 2:08:22 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
    INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [110] milliseconds.
    feb 20, 2013 2:08:22 AM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    feb 20, 2013 2:08:22 AM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    feb 20, 2013 2:08:22 AM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 792 ms

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non uso Eclipse, né ho seguito quella guida che non conosco e nemmeno so a quale libro tu faccia riferimento, né cosa ci sia scritto.

    Quello che ho visto dal codice che hai postato è quanto già detto: nel codice della servlet che hai postato non c'è l'indicazione della direttiva "package" che nella guida di HTML è ben riportato (package controller; a pagina 4). Nelle WebApplications non puoi usare classi nel default-package (ovvero, classi che non stanno in nessun package); al contrario, è obbligatorio avere almeno un package. Immagino che tu conosca la nozione di package, essendo che è un concetto fondamentale che arriva da JSE (presupposto imprescindibile per l'uso di JEE è la conoscenza non superficiale di JSE, ovvero si deve conoscere bene il linguaggio Java nella sua "forma base", altrimenti non si va da nessunissima parte).

    Il file web.xml che hai postato è chiaramente incompleto: non c'è alcun riferimento alla servlet; la servlet non viene né caricata, né mappata su alcuna URL ed è il motivo principale per cui ottieni l'errore 404.

    A questa pagina trovi un esempio di file web.xml con la servlet caricata e mappata ad una URL. Se guardi, c'è una certa differenza con il file web.xml che hai tu.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8

    ciao grazie per la pazienza

    ho ricominciato da capo senza eclipse. Ho le stesso problema, ho modificato i codici in questo modo:
    file web.xml
    codice:
    <!DOCTYPE web-app PUBLIC
       "//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
       "http://java.sun.com/j2ee/dts/web-app_2_2.dtd">
    
    <web-app>
    
    	<display-name>
    	Esempio Servlet 
    	</display-name>
    
    	<description>
    	Questa è l'applicazione Web
    	</description>
    
    	<servlet>
    	  <servlet-name>welcomeServlet</servlet-name>
    	  <description>
    		Un semplice servlet che gestisce una richiesta GET
    	  </description>
    
    	<servlet-class>
    	   WelcomeServlet
    	</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    	  servlet-name>welcomeServlet</servlet-name>
    	  <url-pattern>/welcomeServlet</url-pattern>
    	</servlet-mapping>
    
    </web-app>
    file WlecomeServlet.java
    [code]
    package controller;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;

    public class WelcomeServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<?xml version =\"1.0\"?>");
    out.println("<!DOCTYPE html PUBLIC \"-/W3C/DTD XHTML 1.0 Strict//EN" +
    "http://www.w3.org/TR/xhtml1/DTDxhtml1-strict.dtd\">");

    out.println("<html xmlns = \"http://www.w3.org/1999/xhtml\">");
    out.println("<head>");
    out.println("<title> Un Semplice Servlet </title>");
    out.println("</head>");

    out.println("<body>");
    out.println("<h1>Welcome to Servlets!</h1>");
    out.println("</body>");

    out.println("</html>");
    }
    }
    [code]
    index.html
    codice:
    <?xml version ="1.0"?>
    <!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTDxhtml1-strict.dtd">
    
    <html xmlns = "http://www.w3.org/1999/xhtml">
    
    <head>
       <title> Handling an HTTP Get Request </title>
    </head>
    
    <body>
       <form action = "http://127.0.0.1:8080/jhtp5/WelcomeServlet" method = "get">
    
    	
    
    <label>Clicca sul pulsante per invocare la servlet
    	   <input type = "submit" value = "Get Html Document" />
    	</label></p>
    
       </form>
    </body>
    </html>
    ho creato nella cartella tomcat7\webapps la cartella jhtp5.
    codice:
    \jhtp5
          index.html
          \WEB-INF
           web.xml
                       \classes
                        WelcomeServlet.class
    grazie per l'aiuto e la pazienza

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' ancora sbagliato il web.xml

    codice:
    <servlet-class>
       controller.WelcomeServlet
    </servlet-class>
    Il nome della classe deve sempre essere completamente qualificato.

    Poi, questo spero sia un refuso di copia/incolla sul forum:
    codice:
    <servlet-mapping>
       <servlet-name>welcomeServlet</servlet-name>
       <url-pattern>/welcomeServlet</url-pattern>
    </servlet-mapping>
    La struttura della directory è sbagliata:
    codice:
    \jhtp5
       index.html
       \WEB-INF
          web.xml
          \classes
             \controller
                WelcomeServlet.class
    Il nome del package deve avere la sua controparte nella struttura della directory.


    Mentre nella JSP:
    codice:
    <form action = "http://127.0.0.1:8080/jhtp5/welcomeServlet" method = "get">
    Se la risorsa l'hai dichiarata con la "w" minuscola, allora devi richiamarla così, con la "w" minuscola. Maiuscole e minuscole, nel mondo web, spesso indicano risorse diverse.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10

    ok grazie

    correggo tutto e provo...grazie.

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.