Erro struts

6 respostas
mococa

e ai rapaziada…to com um probleminha q ta dando dor de cabeça num projetinho usando struts

HTTP Status 500 - 
________________________________________
type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 
javax.servlet.ServletException
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
root cause 
java.lang.NullPointerException
	com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:1845)
	com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:1770)
	java.lang.String.valueOf(String.java:2577)
	java.lang.StringBuffer.append(StringBuffer.java:220)
	com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240)
	com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167)
	com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126)
	com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45)
	com.mysql.jdbc.Connection.registerStatement(Connection.java)
	com.mysql.jdbc.Statement.<init>(Statement.java:171)
	com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:139)
	com.mysql.jdbc.ServerPreparedStatement.toString(ServerPreparedStatement.java:851)
	java.lang.String.valueOf(String.java:2577)
	java.lang.StringBuffer.append(StringBuffer.java:220)
	com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240)
	com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167)
	com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126)
	com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45)
	com.mysql.jdbc.Connection.registerStatement(Connection.java)
	com.mysql.jdbc.Statement.<init>(Statement.java:171)
	com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:201)
	com.mysql.jdbc.ServerPreparedStatement.<init>(ServerPreparedStatement.java:133)
	com.mysql.jdbc.Connection.prepareStatement(Connection.java:1370)
	com.mysql.jdbc.Connection.prepareStatement(Connection.java:1335)
	br.com.ricardo.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:26)
	br.com.ricardo.struts.action.AdicionaContatoAction.execute(AdicionaContatoAction.java:26)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
________________________________________
Apache Tomcat/5.5.9

qq coisa mando as actions e forms

6 Respostas

Sombriks

br.com.ricardo.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:26)

dá uma olhada na linha 26 dessa ContatoDAO… Alguma coisa q non deveria estar nula parece estar chegando nula até esse ponto.

H

E aí Mococa??

Olha, provavemente devem ser os nomes das actions referenciadas nos forms/forward. Devem ser exatamente iguais.
Qual seu email?? Tb sou de Mococa!!

Abraço

luis.soares

Não se trata de erro do Struts, e sim em um método do seu ContatoDAO, que está usando um valor nulo.
Debugue este dao, no método que está sendo chamado.

mococa

é a minha classe dao…dê uma olhada nas actions…

**** DAO*****

package br.com.ricardo.jdbc.dao;

import br.com.ricardo.jdbc.jdbc.ConnectionFactory;
import br.com.ricardo.jdbc.modelo.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ContatoDAO {

   // a conexão com o banco de dados
   private Connection connection;

   // construtor que recebe a conex�o
   public ContatoDAO(Connection con) {
      this.connection = con;
   }

   public ContatoDAO() throws SQLException {
      this.connection = ConnectionFactory.getConnection();
   }

   public void adiciona(Contato contato) throws SQLException {

      // prepared statement para inser��o
      PreparedStatement stmt = this.connection.prepareStatement("insert into contatos (nome,email,endereco) values (?, ?, ?)");

      // seta os valores
      stmt.setString(1, contato.getNome());
      stmt.setString(2, contato.getEmail());
      stmt.setString(3, contato.getEndereco());

      // executa
      stmt.execute();
      stmt.close();
   }

   public List<Contato> getLista() throws SQLException {

      PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
      ResultSet rs = stmt.executeQuery();

      List<Contato> list = new ArrayList<Contato>();
      while (rs.next()) {
         // criando o objeto Contato
         Contato contato = new Contato();
         contato.setId(rs.getLong("id"));
         contato.setNome(rs.getString("nome"));
         contato.setEmail(rs.getString("email"));
         contato.setEndereco(rs.getString("endereco"));

         // adicionando o objeto � lista
         list.add(contato);
      }

      rs.close();
      stmt.close();

      return list;
   }

   public void altera(Contato contato) throws SQLException {
      PreparedStatement stmt = connection.prepareStatement("update contatos set nome=?, email=?, endereco=? where id=?");
      stmt.setString(1, contato.getNome());
      stmt.setString(2, contato.getEmail());
      stmt.setString(3, contato.getEndereco());
      stmt.setLong(4, contato.getId());
      stmt.execute();
      stmt.close();
   }

   public void remove(Contato contato) throws SQLException {
      PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
      stmt.setLong(1, contato.getId());
      stmt.execute();
      stmt.close();
   }

   public Contato procura(Long id) throws SQLException {
      PreparedStatement stmt = connection.prepareStatement("select * from contatos where id=?");
      stmt.setLong(1, id);
      ResultSet rs = stmt.executeQuery();
      
      if(!rs.next()) return null;

      Contato c = new Contato();
      c.setId(rs.getLong("id"));
      c.setNome(rs.getString("nome"));
      c.setEmail(rs.getString("email"));
      c.setEndereco(rs.getString("endereco"));
      rs.close();
      stmt.close();
      return c;
   }
}

**** fabrica de conexão*****

package br.com.ricardo.jdbc.jdbc;

import java.sql.*;
import javax.swing.*;

public class ConnectionFactory {

   public static Connection getConnection() throws SQLException {
      try {
      Class.forName("com.mysql.jdbc.Driver");
      JOptionPane.showMessageDialog(null, "Conectando ao banco", "Informação", 2);
      return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/teste",   "root", "catia");
      } catch (ClassNotFoundException e) {
      throw new SQLException(e.getMessage());
      }
      }
}

****minha pagina principal é o login…depois ele vai pra novo.jsp pra adicionar contato…quando vai inserir tá dando este erro …

obs: to usando o netbeans…

valeu

mococa

meu email

[email removido]

luis.soares

Verifique neste bloco :

// prepared statement para inser��o
       PreparedStatement stmt = this.connection.prepareStatement("insert into contatos (nome,email,endereco) values (?, ?, ?)");
 
       // seta os valores
       stmt.setString(1, contato.getNome());
       stmt.setString(2, contato.getEmail());
       stmt.setString(3, contato.getEndereco());

os seguintes pontos :

  • Através de um logger (por exemplo Log4j), ou debugando pela sua IDE, verifique se o stmt não está nulo.
  • Verifique se contato.getNome, contato.getEmail e contato.getEndereco não estão nulos.

A principio, suas classes estão corretas. Talvez o driver não esteja conseguindo criar uma nova conexão, por exemplo.
De qualquer maneira, o erro provavelmente vai estar neste bloco.
Verifique isso ae…
Mas não é no Struts !

Abraço.

Criado 5 de dezembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 6
Participantes 4