Eclipse + tomcat + jsp + mysql - erro http 500

Pessoal, boa tarde

É o meu primeiro post aqui no fórum. Sou iniciante no Java. Fiquei na dúvida se colocaria esse tópico aqui (web) ou no (básico) pra iniciantes…

Bom… Estou montando meu primeiro projeto WEB, tudo funciona corretamente. Acesso a aplicação no IE, consigo fazer o cadastro de um usuário e senha.
Isso é gravado no BD, certinho…
porém…em seguida se tento fazer novo cadastro, aparece uma mensagem de erro. Se “resseto” o servidor, aí ele volta a funcionar normalmente, porém
só da primeira vez. Na segunda tentativa de cadastro, a mesma mensagem aparece

Poderiam me ajudar??

Segue mensagem com as demais informações:

HTTP Status 500 -


type Exception report

message

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

exception

java.lang.NullPointerException
DAO.JDBCUsuarioDAO.inserir(JDBCUsuarioDAO.java:26)
Action.InserirUsuario.doPost(InserirUsuario.java:55)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

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

TRECHO DO CÓDIGO ONDE É APONTADO O ERRO ACIMA (JDBCUsuarioDAO.inserir(…))

	public void inserir(Usuarios usuarios) {
		String comando="INSERT INTO usuarios (UsuLogin, UsuSenha) VALUES (?,?)";
		PreparedStatement p;
		try {
==erro===>	p = this.conexao.prepareStatement(comando);
			//p = this.con.prepareStatement(comando);
			p.setString(1, usuarios.getUsuario());
			p.setString(2, usuarios.getSenha());
			p.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

STACKTRACE:

java.sql.SQLException: ResultSet is from UPDATE. No Data.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6870)
at com.mysql.jdbc.ConnectionImpl.loadServerVariables(ConnectionImpl.java:3894)
at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3437)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2437)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2207)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:797)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at DAO.FabricaConexao.fazConexao(FabricaConexao.java:14)
at Action.InserirUsuario.doPost(InserirUsuario.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

Jun 27, 2012 1:35:03 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [Action.InserirUsuario] in context with path [/FPSerco] threw exception
java.lang.NullPointerException
at DAO.JDBCUsuarioDAO.inserir(JDBCUsuarioDAO.java:29)
at Action.InserirUsuario.doPost(InserirUsuario.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

Este cara> this.conexao está nulo.
Onde você faz dele um objeto do tipo Connection, que pode disponibilizar o prepareStatement?

Olá drsmachado, boa tarde…

Faço isso aqui no doPost

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String usuario = request.getParameter("usuario");
		String senha = request.getParameter("senha");
		
		Usuarios novoUsuario = new Usuarios();
		novoUsuario.setUsuario(usuario);
		novoUsuario.setSenha(senha);
		
		FabricaConexao fabrica = new FabricaConexao();
=========>	Connection conexao = fabrica.fazConexao();
		JDBCUsuarioDAO dao = new JDBCUsuarioDAO(conexao);
		dao.inserir(novoUsuario);
		fabrica.fechaConexao();
	
		
	}

Então… na primeira vez que “rodo” a aplicação (dentro do eclipse mesmo), ele roda normal…abra a página, digito os dados, clico no botão e tudo é gravado no BD, certinho. Então tento fazer o segundo cadastro e ele já apresenta essa mensagem…

[quote=Wlad]Olá drsmachado, boa tarde…

Faço isso aqui no doPost

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	String usuario = request.getParameter("usuario");
	String senha = request.getParameter("senha");
	
	Usuarios novoUsuario = new Usuarios();
	novoUsuario.setUsuario(usuario);
	novoUsuario.setSenha(senha);
	
	FabricaConexao fabrica = new FabricaConexao();

=========> Connection conexao = fabrica.fazConexao();
JDBCUsuarioDAO dao = new JDBCUsuarioDAO(conexao);
dao.inserir(novoUsuario);
fabrica.fechaConexao();

}

[/quote]
Por favor, ao postar códigos, use a tag [code] para que o mesmo fique mais adequado.
Edite os dois posts, antes do início do trecho de código, coloque a tag e, ao fim do trecho de código, encerre-a.
Isso facilita a leitura do código.
Debugue o código e veja se conexao está sendo instanciada e se o método construtor da classe JDBCUsuarioDAO está instanciando o objeto que causa o problema.

Voltando nesse assunto…

Fiz um debug completo, linha a linha… realmente na segunda vez tento fazer o cadastro do usuário, conexao está null…

public class FabricaConexao {

		private java.sql.Connection conexao;
		public Connection fazConexao(){
			try{
                                                     Class.forName("com.mysql.jdbc.Driver");				
			   conexao=java.sql.DriverManager.getConnection("jdbc:mysql://IPdoServer:3306/BancoDeDados","usuario","senha");
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			return conexao;
		}

Percebi o seguinte…isso ocorre nessa linha de comando:

conexao=java.sql.DriverManager.getConnection(“jdbc:mysql://IPdoServer:3306/BancoDeDados”,“usuario”,“senha”);

Nessa linha, na segunda vez que passa por aí, “conexao” fica null e cai direto no catch…conforme código postado acima…

Agora um detalhe que achei interessante…quando estou na perspectiva do DEBUG e coloco um BREAKPOINT na linha abaixo…

public class JDBCUsuarioDAO implements UsuarioDAO {

BREAKP->	Connection conexao;
	public JDBCUsuarioDAO(Connection conexao){
		   this.conexao=conexao;
	}

…não é apresentado mais o erro. Passo linha a linha, quantas vezes eu quiser, e dá certo…

:\

Esse é um comportamento totalmente atípico. Tem algo muito estranho nisso aí.

Pois é… muito estranho…

Vou continuar nas pesquisas por aqui…ver onde consigo chegar… :roll:

Veja só:

O meu servidor está numa máquina virtual. Servidor red Hat + Mysql…

O TOMCAT está na minha máquina “real”…

Fiz o seguinte:

Instalei o MYSQL na minha máquina “real” e criei um novo banco lá. Mudei a minha conexão pra lá e…FUNCIONOU NORMAL.

Aparentemente algum problema com esse servidor em máquina virtual…

Por favor, ao postar tópicos, não deixe o título apenas com letras maiúsculas.

[quote=Wlad]Veja só:

O meu servidor está numa máquina virtual. Servidor red Hat + Mysql…

O TOMCAT está na minha máquina “real”…

Fiz o seguinte:

Instalei o MYSQL na minha máquina “real” e criei um novo banco lá. Mudei a minha conexão pra lá e…FUNCIONOU NORMAL.

Aparentemente algum problema com esse servidor em máquina virtual…[/quote]
Hum, isso me leva a crer que o tratamento de exceção está com alguma falha…
Pois, caso contrário, uma exception seria lançada ao ocorrer erro na conexão e não o erro no servidor.

Olá sou novo aqui no forum, estava com o um problema parecido e resolvi pesquisar ;!
estou fazendo aulas em casa e utilizo o tomcat e mysql,
Criei uma classe fabrica de conexões, os aplicativos na minha maquina gravão e acessão normalmente o banco de dados no localhost, mas ao utilizar ela junto com tomcat me retornava erro 500, no eclipse…testando com netbeans roda normal, mas o curso e focado em eclipse… bem segue código que resolveu meu problema por enquanto :wink:

public Connection getConnection(){

java.sql.Connection conexao = null;

try {
	Class.forName("com.mysql.jdbc.Driver");
	 conexao = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/*****", "root","****456");
} catch (ClassNotFoundException e1 ) {
	e1.printStackTrace();
	
}catch (SQLException e) {
    throw new RuntimeException(e);
}
return conexao;
}     	
}

[quote=Wlad]Veja só:

O meu servidor está numa máquina virtual. Servidor red Hat + Mysql…

O TOMCAT está na minha máquina “real”…

Fiz o seguinte:

Instalei o MYSQL na minha máquina “real” e criei um novo banco lá. Mudei a minha conexão pra lá e…FUNCIONOU NORMAL.

Aparentemente algum problema com esse servidor em máquina virtual…[/quote]

Já verificou se é algum tipo de permissão ?

Já olhou os logs do db ?