Errore Servlet execution threw an exception

di il
13 risposte

Errore Servlet execution threw an exception

PROBLEMA CON HIBERNATE-POSTGRESQL-TOMCAT IL FORM CHE HO CREATO USERNAME E PASSWORD DOVREBBE CONTROLLARE SE ESISTE L'UTENTE IN DB ATTRAVERSO UNA SERVLET E RESTITUIRE UNA PAGINA HTML DI RISPOSTA MA ... FINISCE TUTTO IN UNA TERRIBILE ECCEZIONE DA CUI NON RIESCO PROPRIO A USCIRMENE HO INSTALLATO TANTI JAR MA NIENTE DA FARE.
vi posto l'eccezione e le classi


type Exception report

message Servlet execution threw an exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


root cause
java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.cfg.Configuration
com.azienda.progettoCorso.dao.DaoHibernate.buildSessionFactory(DaoHibernate.java:31)
com.azienda.progettoCorso.dao.DaoHibernate.<init>(DaoHibernate.java:38)
com.azienda.esempiCorso.sessione15.LoginServlet.doPost(LoginServlet.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 <display-name>Corso</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>Test</servlet-name>
 <servlet-class>com.azienda.esempiCorso.sessione15.TestServlet</servlet-class>
 </servlet>

 <servlet-mapping>
 <servlet-name>Test</servlet-name>
 <url-pattern>/test</url-pattern>
 </servlet-mapping>

 <servlet>
 <servlet-name>Login</servlet-name>
 <servlet-class>com.azienda.esempiCorso.sessione15.LoginServlet</servlet-class>
 </servlet>

 <servlet-mapping>
 <servlet-name>Login</servlet-name>
 <url-pattern>/login</url-pattern>
 </servlet-mapping>

---------------------------------------------------------------------------


<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Login</title>
</head>
<body>
 <div align="center" style="padding-top: 150px">
 <form action="/Corso/login" method="post">
 <table border="0" width="300px" height="100px" cellpadding="0" style="background-color:silver">
 <tr>
 <td align="right">
 Username
 </td>
 <td align="left">
 <input type="text" name="userName">
 </td>
 </tr>
 <tr>
 <td align="right">
 password
 </td>
 <td>
 <input type="password" name="password">
 </td>
 </tr>
 <tr>
 <td align="center" colspan="2">
 <input type="submit" value="Login">
 </td>
 </tr>
</table>
</form>
</div>
</body>
</html>

--------------------------------------------------------------

package com.azienda.esempiCorso.sessione15;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.azienda.progettoCorso.dao.DaoHibernate;
import com.azienda.progettoCorso.dao.DaoInterface;
import com.azienda.progettoCorso.model.Utente;

public class LoginServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
	{
	doPost(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException 
	{
	String userName = request.getParameter("userName");
	String password = request.getParameter("password");
	if ( userName != null && !userName.isEmpty() && password != null && !password.isEmpty() )
	{
	Utente utente = new Utente();
	utente.setUserName(userName);
	utente.setPassword(password);
	DaoInterface dao = new DaoHibernate();
	try
	{
	Utente utenteFromDb = dao.retrieveById(utente.getId(),true);
	if ( utenteFromDb != null && utenteFromDb.getPassword().equals(password) )
	{
	request.getSession().setAttribute("userLogged","YES");
	String requestUrl = (String) request.getSession().getAttribute("requestUrl");
	if ( requestUrl != null && !requestUrl.isEmpty() )
	{
	request.getSession().removeAttribute("requestUrl");
	request.getRequestDispatcher(requestUrl).forward(request,response);
	}
	else
	{
	request.getRequestDispatcher("/html/loginOk.html").forward(request,response);
	}
	}
	else
	{
	request.getRequestDispatcher("/html/loginError.html").forward(request,response);
	}
	}
	catch ( Exception ex )
	{
	ex.printStackTrace();
	request.getRequestDispatcher("/html/loginError.html").forward(request,response);
	}
	finally
	{
	((DaoHibernate) dao).getSession().getSessionFactory().close();
	}
	}
	else
	{
	request.getRequestDispatcher("/html/login.html").forward(request,response);
	}
	}
}
---------------------------------------------------------------
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0 dtd">
<hibernate-configuration>
	<session-factory>
	<!-- Database connection settings -->
	<property name="connection.driver_class">org.postgresql.Driver</property>
	<property name="connection.url">jdbc:postgresql://localhost:5432/corso</property>
	<property name="connection.username">corso</property>
	<property name="connection.password">corso</property>
	<!-- JDBC connection pool (use the built-in) -->
	<property name="connection.pool_size">1</property>
	<!-- SQL dialect -->
	<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
	<!-- Enable Hibernate's automatic session context management -->
	<property name="current_session_context_class">thread</property>
	<!-- Disable the second-level cache -->
	<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
	<!-- Echo all executed SQL to stdout -->
	<property name="show_sql">true</property>
	<!-- Drop and re-create the database schema on startup -->
	<property name="hbm2ddl.auto">update</property>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Materia.hbm.xml"/>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Aula.hbm.xml"/>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Sede.hbm.xml"/>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Soggetto.hbm.xml"/>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Corso.hbm.xml"/>
	<mapping resource="com/azienda/progettoCorso/model/hbm/Utente.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

------------------------------------------------------------------

librerie jar tutte le necessarie.

13 Risposte

  • Re: Errore Servlet execution threw an exception

    blade44i ha scritto:


    root cause
    java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.cfg.Configuration
    NoClassDefFoundError è una eccezione un po' particolare, nel senso che può indicare che una classe non si riesce proprio a trovarla in classpath oppure che l'ha trovata ma c'è stato qualche problema durante la fase di inizializzazione. Quest'ultimo è sicuramente il tuo caso (se la classe non l'avesse proprio trovata, il messaggio sarebbe differente e non direbbe "Could not initialize").

    A "naso" mi verrebbe da pensare che ci sono problemi con il logging. Hibernate (da 4.x in poi) si basa sul JBoss logging che è solo una libreria che fa da "ponte" verso un certo numero di altre librerie di logging vere e proprie (es. log4j).

    Comunque se vuoi chiarire il contesto dovresti precisare anche un po' di altre cose:

    a) come stai gestendo il build del progetto: "a mano" con i soli tools del JDK? Con un IDE? (quale?) Con un tool di build tipo Ant/Maven? (a mano o da un IDE?)
    b) quali jar hai usato
    c) DOVE hai disposto i jar, se hai fatto questo manualmente
  • Re: Errore Servlet execution threw an exception

    Ok controllo e ti posto tutto. Cmq sto usando eclipse con tool jboss che comprende anche le classi di hibernate. Uso svariati jar nel builth path e nel path del dynamic web project uso postgresql come db e tomcat come servlet container. Il problema secondo me è nei Jar in quanto è nell accesso al db hibernate blocca la retrieve dell utente e quindi non avviene il forward all html creato per prova.
  • Re: Errore Servlet execution threw an exception

    Dimenticavo ho effettuato ila deployement automatico con eclipse quindi nel web-inf ci sono i Jar che a breve ti elenco.
  • Re: Errore Servlet execution threw an exception

    Queste sono le libreria nel dinamic e nel build path
    Allegati:
    20337_8816cddd9a256468ff97e7ca97ef243f.jpg
    20337_8816cddd9a256468ff97e7ca97ef243f.jpg

    20337_4a4d75c10e5aa1e15d394a8981637fa8.jpg
    20337_4a4d75c10e5aa1e15d394a8981637fa8.jpg

    20337_382ff4653aa9a8d98ad0b36c3a512446.jpg
    20337_382ff4653aa9a8d98ad0b36c3a512446.jpg
  • Re: Errore Servlet execution threw an exception

    Perché vedo anche cose di Spring Framework? Il tuo progetto è basato su Spring? Poi vedo ojdbc14.jar (è un driver JDBC del DB Oracle!) Poi vedo ben 2 jar per PostgreSQL ... insomma un bel miscuglio di roba.

    Domanda: dove hai preso tutta 'sta roba??

    E vedo che usi Hibernate 3.6.3. Prima di Hibernate 4, veniva usato SLF4J, non il JBoss logging.


    P.S. inoltre potresti anche vincere un premio per il peggior screenshot del forum.
    Ma fare un DIR da prompt dei comandi ... no?
  • Re: Errore Servlet execution threw an exception

    No spring non lo sto ancora usando questo in realtà è un esercizio di un corso su java ove il docente ha omesso di specificare i Jar sono riuscito a vederli nella sua video lezione ma ho dovuto aggiungere qualcosa perché hibernate inizialmente non effettuava transazione su postsql. lo screen è dimensioni ridotte perché il vostro forum non fa caricare jpeg , lo so che è un miscuglio poiche sono partito con jbcd arrivando a hibernate in piu ho aggiunto in base ai forum americani qualche Jar in più per sviare l eccezione insomma ora sto in un punto morto. Se posso eliminare tutti i Jar e mi specificate un set di Jar per hibernate, postgresql 9.4 admin 3, tomcat 8.0.39 forse riesco a fare la retrieve utente in db con login.
  • Re: Errore Servlet execution threw an exception

    Lo so scusate era meglio un dir.
  • Re: Errore Servlet execution threw an exception

    Non sto sul computer le avevo sul telefono le screen
  • Re: Errore Servlet execution threw an exception

    Sfortunatamente gestire le dipendenze "a mano" in un progettino del genere anche se basilare, non è banale e richiede un minimo di impegno per reperire tutti i jar corretti e necessari. Alcune dritte:

    Se vuoi usare esattamente Hibernate 3.6.3, allora il pacchetto di distribuzione completo lo trovi qui (zip o tar.gz a tua scelta):
    https://sourceforge.net/projects/hibernate/files/hibernate3/3.6.3.Final/

    Nel manuale compreso nella distribuzione c'è scritto:
    If working from the Hibernate distribution bundle, this would mean hibernate3.jar, all artifacts in the lib/required directory and all files from either the lib/bytecode/cglib or lib/bytecode/javassist directory; additionally you will need both the servlet-api jar and one of the slf4j logging backends.
    Lì c'è solo la API di SLF4J (slf4j-api-1.6.1.jar). Ti serve anche un backend ad esempio per log4j e poi la log4j vera e propria.

    Quindi:
    Vai in e prendi il pacchetto di distribuzione slf4j-1.6.1.zip. Dentro ci trovi slf4j-log4j12-1.6.1.jar che è quello che serve per buttare il logging su log4j

    Vai in e prendi il pacchetto dei binari per log4j (zip o tar.gz a tua scelta) e dentro ci trovi log4j-1.2.17.jar

    Per il driver JDBC di PostgreSQL vai in . Scegli il jar in base a: a) versione del DB PostgreSQL (es. la 9.4.xxxx) e b) la versione del tuo runtime Java (es. 1.7)


    Potrebbe darsi che hai anche bisogno di altro ... ma in questo momento non saprei aiutarti oltre.
  • Re: Errore Servlet execution threw an exception

    E per tomcat??? Qualche jar utile per le servlet considerato che l eccezione parla di servlet soket
  • Re: Errore Servlet execution threw an exception

    Cmq se uso hibernate 5 posso inserire jboss se uso hibernate 3 devo usare un altro Jar. Ma non c'entra nulla che ho installato jboss dal marketplace con il tool di hibernate?
  • Re: Errore Servlet execution threw an exception

    Sinceramente non capisco come si possa scegliere i Jar giusti per un progetto con tutti sti Jar a disposizione vado in confusione totale non è molto semplice capire quali Jar ti servono su cosa devi lavorare
  • Re: Errore Servlet execution threw an exception

    blade44i ha scritto:


    E per tomcat??? Qualche jar utile per le servlet considerato che l eccezione parla di servlet soket
    Tomcat non c'entra granché (potrebbe esserci un altro servlet container al posto di Tomcat). C'entrano invece le API delle Servlet. La cosa particolare però è che se sviluppi delle classi servlet, le API delle Servlet ovviamente servono in compilazione ma poi a runtime il jar delle API Servlet NON lo devi fornire tu perché tanto è già fornito "di serie" da un servlet container.

    blade44i ha scritto:


    Sinceramente non capisco come si possa scegliere i Jar giusti per un progetto con tutti sti Jar a disposizione vado in confusione totale non è molto semplice capire quali Jar ti servono su cosa devi lavorare
    Lo ripeto: quando si usano librerie/framework complessi es. Hibernate, Spring Framework o altri del genere, gestire "a mano" le dipendenze NON è banale. Serve un po' di impegno, bisogna cercare i pacchetti dei "binari" sui vari siti delle librerie, un po' come ho fatto io oggi per indicarti dove trovare i jar, bisogna leggere la documentazione, comprendere quali sono le dipendenze necessarie ecc...

    Diciamo che tutto questo fa anche un po' parte della "esperienza" che si dovrebbe fare per prendere mano con questo tipo di progetti.
    Se vuoi le cose semplici .... non c'è (e io non ho) la bacchetta magica ... serve un minimo di impegno.

    Se vuoi qualcosa di un po' più semplice, c'è Apache Maven, un tool di build usabile anche da Eclipse che gestisce in automatico le dipendenze. Ma: a) devi cambiare radicalmente tipo di progetto (non puoi più usare un "Dynamic Web Project"; b) devi comunque comprendere il funzionamento e le convenzioni di Maven e c) devi comunque saper specificare a Maven quali sono le dipendenze base da utilizzare.
Devi accedere o registrarti per scrivere nel forum
13 risposte