Erro Exception, o que deve ser

2 respostas
J

Sou novato em JAVA, estou lendo o livro java como Programar dos Deitel.

No capulitulo de servlets, eu acompanhei todos, mas quando chegou no último servlet que é com banco de dados esta dando erro o que pode ser:

Arquivo web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://ww.w3.org/2001/XMLSchema-instace"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
		http://java.sun.com/xml/ns/j2ee/wep-app_2_4.xsd"
	version="2.4">
<!-- Meu primeiro Servlet-->
<display-name>
	Programando com Java 
	Utilizando Servlet
</display-name>

<description>
	Demostração do uso do Java através de Servlet
</description>

<!-- Definições do meu primeiro servelet -->
<servlet>
	<servlet-name>welcome1</servlet-name>
	<descripton>Servelet que processa HTTP get request</descripton>
	<servlet-class>WelcomeServlet</servlet-class>
</servlet>

<!-- Localização do meu Servlet -->
<servlet-mapping>
	<servlet-name>welcome1</servlet-name>
	<url-pattern>/welcome1</url-pattern>
</servlet-mapping>
<!-- fim do primeiro-->

<!-- Definições do meu segundo servelet -->
<servlet>
	<servlet-name>welcome2</servlet-name>
	<descripton>Servelet que processa HTTP get request com parametros</descripton>
	<servlet-class>WelcomeServlet2</servlet-class>
</servlet>

<!-- Localização do meu Servlet -->
<servlet-mapping>
	<servlet-name>welcome2</servlet-name>
	<url-pattern>/welcome2</url-pattern>
</servlet-mapping>
<!-- fim do segundo-->

<!-- Definições do meu terceiro servelet -->
<servlet>
	<servlet-name>welcome3</servlet-name>
	<descripton>Servelet que processa HTTP post request com parametros</descripton>
	<servlet-class>WelcomeServlet3</servlet-class>
</servlet>

<!-- Localização do meu Servlet -->
<servlet-mapping>
	<servlet-name>welcome3</servlet-name>
	<url-pattern>/welcome3</url-pattern>
</servlet-mapping>
<!-- fim do terceiro-->

<!-- Definições do meu terceiro servelet -->
<servlet>
	<servlet-name>redirect</servlet-name>
	<descripton>Servelet que redireciona de acordo com o parametro fornecido</descripton>
	<servlet-class>RedirectServlet</servlet-class>
</servlet>

<!-- Localização do meu Servlet -->
<servlet-mapping>
	<servlet-name>redirect</servlet-name>
	<url-pattern>/redirect</url-pattern>
</servlet-mapping>
<!-- fim do terceiro-->

<!-- Definições do meu terceiro servelet -->
<servlet>
	<servlet-name>animalsurvey</servlet-name>
	<descripton>Servelet calcula os votos e exibe na tela.</descripton>
	<servlet-class>com.deitel.jhtp6.servlets.SurveyServlet</servlet-class>
</servlet>

<init-param>
	<param-name>databaseDriver</param-name>
	<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>

<init-param>
	<param-name>databaseName</param-name>
	<param-value>jdbc:mysql://localhost:3306/bancodedados</param-value>
</init-param>

<init-param>
	<param-name>username</param-name>
	<param-value>root</param-value>
</init-param>

<init-param>
	<param-name>password</param-name>
	<param-value>root</param-value>
</init-param>

<!-- Localização do meu Servlet -->
<servlet-mapping>
	<servlet-name>animalsurvey</servlet-name>
	<url-pattern>/animalsurvey</url-pattern>
</servlet-mapping>
<!-- fim do terceiro-->

</web-app>
Formulário que passa a opção marcada para o servlet
<form method = "post" action = "/Serve/animalsurvey">
   <p>Qual seu animal favorito ?</p>
   <p>
      <input type = "radio" name = "animal" 
         value = "1" />
      Cachorro<br />
      <input type = "radio" name = "animal" 
         value = "2" />
      Gato
      <br />
      <input type = "radio" name = "animal" 
         value = "3" />
      Passarinho
      <br />
      <input type = "radio" name = "animal" 
         value = "4" />
      Serpente<br />
      <input type = "radio" name = "animal" 
         value = "5" checked = "checked" />
      Nenhum
   </p>
   <p><input type = "submit" value = "Votar" />
   </p>
</form>
classe SurveyServlet
package com.deitel.jhtp6.servlets;

import java.io.PrintWriter;
import java.io.IOException;
import java.sql.Connection;   
import java.sql.DriverManager;
import java.sql.Statement;    
import java.sql.ResultSet;    
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SurveyServlet extends HttpServlet 
{
   private Connection connection;
   private Statement statement;  

   // configura a conexão de banco de dados e cria a instrução SQL
   public void init( ServletConfig config ) throws ServletException
   {
      // tenta uma conexão ao banco de dados e cria instruções
      try 
      {   
         Class.forName( config.getInitParameter( "databaseDriver" ) );
         connection = DriverManager.getConnection(                    
            config.getInitParameter( "databaseName" ),             
            config.getInitParameter( "username" ),                    
            config.getInitParameter( "password" ) );                  

         // cria Statement para consultar banco de dados
         statement = connection.createStatement();
      } // fim do try
      // para qualquer exceção lança uma UnavailableException para
      // indicar que o servlet não está atualmente disponível
      catch ( Exception exception ) 
      {
         exception.printStackTrace();
         throw new UnavailableException(exception.getMessage());
      } // fim do catch
   }  // fim do método init

   // processa as respostas da pesquisa
   protected void doPost( HttpServletRequest request,
      HttpServletResponse response )
         throws ServletException, IOException
   {
      // configura as respostas para o cliente
      response.setContentType( "text/html" ); 
      PrintWriter out = response.getWriter();

      // inicia o documento XHTML                    
      out.println( "<?xml version = \"1.0\"?>" );

      out.printf( "%s%s%s", "<!DOCTYPE html PUBLIC", 
         " \"-//W3C//DTD XHTML 1.0 Strict//EM\"",
         " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" );

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

      // seção da cabeça do documento
      out.println( "<head>" );  
      
      // lê a resposta da pesquisa atual
      int value = 
         Integer.parseInt( request.getParameter( "animal" ) );
      String sql;

      // tenta processar um voto e exibe os resultados atuais
      try 
      {
         // atualiza o total para as respostas atuais da pesquisa
         sql = "UPDATE surveyresults SET votes = votes + 1 " +
               "WHERE id = " + value;
         statement.executeUpdate( sql );

         // obtém o total de todas as respostas da pesquisa
         sql = "SELECT sum( votes ) FROM surveyresults";
         ResultSet totalRS = statement.executeQuery( sql );
         totalRS.next(); // posição para o primeiro registro
         int total = totalRS.getInt( 1 );

         // obtém os resultados
         sql = "SELECT surveyoption, votes, id FROM surveyresults " + 
            "ORDER BY id";
         ResultSet resultsRS = statement.executeQuery( sql );
         out.println( "<title>Thank you!</title>" );
         out.println( "</head>" );  
         
         out.println( "<body>" );  
         out.println( "<p>Thank you for participating." );
         out.println( "<br />Results:</p><pre>" );
         
         // processa os resultados
         int votes;
         
         while (resultsRS.next()) 
         {
            out.print(resultsRS.getString( 1 ));
            out.print( ": " );
            votes = resultsRS.getInt( 2 );
            out.printf( "%.2f", ( double ) votes / total * 100 );
            out.print( "%  responses: " );
            out.println( votes );
         } // fim do while

         resultsRS.close();
         
         out.print( "Total responses: " );
         out.print( total );
         
         // fim do documento XHTML
         out.println( "</pre></body></html>" );         
         out.close();
      } // fim do try
      // se ocorrer uma exceção de banco de dados, retorna a página de erro
      catch ( SQLException sqlException ) 
      {
         sqlException.printStackTrace();
         out.println( "<title>Error</title>" );
         out.println( "</head>" );  
         out.println( "<body><p>Database error occurred. " );
         out.println( "Try again later.</p></body></html>" );
         out.close();
      } // fim do catch
   } // fim do método doPost

   // fecha instruções de SQL e banco de dados quando servlet termina
   public void destroy()
   {
      // tenta fechar instruções e conexão do banco de dados
      try 
      {
         statement.close();
         connection.close();
      } // fim do try
      // trata exceções de banco de dados retornando um erro ao cliente
      catch ( SQLException sqlException ) 
      {
         sqlException.printStackTrace();
      } // fim do catch
   } // fim do método destroy
} // fim da classe SurveyServlet
Estrutura de Diretórios
WEB-INF
    Classes
        com
            deitel
                jhtp6
                   servlets
     lib
Erro:
type Exception report

message 

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

exception 

javax.servlet.ServletException: Error allocating a servlet instance
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Unknown Source)


root cause 

java.lang.NoClassDefFoundError: IllegalName: com/deitel/jhtp6/servlets/SurveyServlet
	java.lang.ClassLoader.preDefineClass(Unknown Source)
	java.lang.ClassLoader.defineClass(Unknown Source)
	java.security.SecureClassLoader.defineClass(Unknown Source)
	org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1812)
	org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:866)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1319)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Unknown Source)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

2 Respostas

E

opa blz?

bom pelo que eu verifiquei, no seu web.xml
me parece ter parametros repetidos…

pela descrição do erro você verificou se o compilado .class
está no endereço correto?

verifique se está lá, me parece que não encontrou a classe e com isso
não conseguiu carregar o servlet :roll:

[]´s

G

Isso aí tá com cara de exception na hora de startar o servidor…
Veja se o servidor inicializou corretamente! Esse tipo de coisa pode acontecer ou por erros na aplicação (web.xml por exemplo) ou por má instalação do servidor…

Criado 9 de outubro de 2006
Ultima resposta 9 de out. de 2006
Respostas 2
Participantes 3