[RESOLVIDO]ajuda pacote javax.servlet.*;

Boa Tarde!
Gostaria de pedir auxilio no forum para o seguinte problema, tenho uma classe AdicionaContatoServlet porém os meus imports:

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
estão apresentando erro no Eclipse porém no curso que estou fazendo usei esses imports e aceitou normalmente, ai quando vou gravar um contato no banco de dados apresenta esse erro no console para mim.

[code]The import javax.servlet.ServletException cannot be resolved
The import javax.servlet.http cannot be resolved
The import javax.servlet.http cannot be resolved
The import javax.servlet.http cannot be resolved
HttpServlet cannot be resolved to a type
HttpServletRequest cannot be resolved to a type
HttpServletResponse cannot be resolved to a type
ServletException cannot be resolved to a type

at br.com.caelum.jdbc.servlet.AdicionaContatoServlet.<init>(AdicionaContatoServlet.java:10)
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:532)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
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:636)

[/code]

Alguém saberia dizer onde errei?

Desde já agradeço.

1 curtida

Opa,

Provavelmente vc importou o projeto de outra workspace.
Ao importar, o Eclipse não conseguiu encontrar o servidor para aplicação Web (provavelmente o Tomcat).
Não encontrando o servidor, tua “Target Runtime” se perdeu e o Eclipse gerou os erros pois existe a necessidade de um servidor para rodar uma aplicação Web.

Se teu projeto for do tipo “Dynamic Web Project”, e deve ser…
Clique com o botão invertido em cima do nome do projeto e vá em:
Propriedades -> Targeted Runtime
Nesta opção, basta ticar o servidor que vc deseja utilizar.

OBS.: É necessário ter um servidor configurado na workspace para que seja exibida essa opção na Targeted Runtime.

Espero ter ajudado…

8 curtidas

Bruno obrigado ai cara… fiz isso mesmo salvei a pasta do projeto e importei no eclipse aqui de casa, ai fiz algumas modificações como por exemplo o banco de dados, que coloquei o postgreSQL.
a mesagem que dava antes sumiu mas quando vou adicionar o contato no navegador, o eclipse me retorna a seguinte mensagem:

agora aparece a seguinte mensagem quando vou adicionar o contato:

[code]java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/21
at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:15)
at br.com.caelum.jdbc.dao.ContatoDAO.(ContatoDAO.java:20)
at br.com.caelum.jdbc.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
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:636)

Caused by: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/21
at java.sql.DriverManager.getConnection(DriverManager.java:640)
at java.sql.DriverManager.getConnection(DriverManager.java:200)
at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
… 19 more[/code]

Importei o postgresql-9.1-901.jdbc3.jar para dentro da pasta webContent\web-inf\lib, restartei o tomcat porém só fica dando essa mensagem agora, é como se não estivesse encontrando o .jar para conectar com o banco, o mais engraçado é que quando executo pelo eclipse a classe testeInsere (é uma classe que criei no src do meu projeto) e o testeLista (outra classe que criei no src do meu projeto) ele conecta e me traz o resultados corretos.

Vixx,

Verifique se em “Propriedades -> Java Build Path -> Libraries”, o JAR está sendo apresentado.
Além disso, inclua esse JAR no “Propriedades -> Deployment Assembly”.

Provavelmente teu JAR esta no “Java Build Path”.
Ao compilar através de uma Main, funciona normalmente pois não precisa do Tomcat.
Ao compilar através do aplicativo normal, o Tomcat empacota a aplicação sem o JAR pois não está no “Deployment Assembly”.
O Tomcat tenta encontrar a classe sem sucesso…

Basta adicionar no “Deployment Assembly”.

Então o jar está aparecendo no “Propriedades -> Java Build Path -> Libraries” e inclui ele no Deployment Assembly, até especifiquei a porta do banco no jdbc, mas continua com a mensagem de antes.

O que estou usando aqui em casa é o Eclipse Indigo EE , Postgre 8.4.10, Tomcat 7.0.23 rodando no ubuntu 10.04

Puts,

Joga o fonte das duas classes ai pra gente pode comparar…

Segue os fontes da Servlet, do ContatoDAO e da fábrica de conexoes.

[code]package br.com.caelum.jdbc.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

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

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {

protected void service (HttpServletRequest request, HttpServletResponse response)
	throws  IOException, ServletException{
		PrintWriter out = response.getWriter();
	
	String nome = request.getParameter("nome");
	String endereco = request.getParameter("endereco");
	String email = request.getParameter("email");
	String dataEmTexto = request.getParameter("dataNascimento");
	Calendar dataNascimento = null;
	try{
		Date date = new SimpleDateFormat ("dd/MM/yyyy").parse(dataEmTexto);
		dataNascimento = Calendar.getInstance();
		dataNascimento.setTime(date);
	} catch (ParseException e ){
		out.println("Erro de conversão da data");
		return; // para a execucao do método.
	}
	//Monta um objeto contato.
	Contato contato = new Contato();
	contato.setNome(nome);
	contato.setEndereco(endereco);
	contato.setEmail(email);
	contato.setDataNascimento(dataNascimento);
	
	// Salva o contato
	ContatoDAO dao = new ContatoDAO();
	dao.adiciona(contato);
	
	// Imprime o nome do contato que foi adicionado.
	out.println("<html>");
	out.println("<body>");
	out.println("Contato " + contato.getNome() + " adicionado com sucesso");
	out.println("</body>");
	out.println("</hmtl>");
}

}[/code]

[code]package br.com.caelum.jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {

private Connection connection;

public ContatoDAO(){//Criando um nova conexão para ESSA conexão.
	this.connection = new ConnectionFactory().getConnection();
}

public void adiciona (Contato contato){//Inicio do método que adiciona um contato na agenda.
	String sql = "insert into contatos (nome,email,endereco,dataNascimento,telefoneResidencial," +
			"telefoneCelular) values (?,?,?,?,?,?)";
	try{
		//Prepared statement para insercao.
		PreparedStatement stmt = connection.prepareStatement(sql);
		
		//seta os valores.
		stmt.setString(1,contato.getNome());
		stmt.setString(2,contato.getEmail());
		stmt.setString(3,contato.getEndereco());			
		stmt.setDate(4, new Date (contato.getDataNascimento().getTimeInMillis()));
		stmt.setString(5,contato.getTelefoneResidencial());
		stmt.setString(6, contato.getTelefoneCelular());
		//executa.
		stmt.execute();
		stmt.close();// Fim do método que adiciona um contato na agenda.
	}	catch (SQLException e){
			throw new RuntimeException(e);
	}
}

}[/code]

[code]package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

public Connection getConnection(){
System.out.println ("Conectando ao banco.");
try{
	return DriverManager.getConnection("jdbc:postgresql://localhost/21:5432","postgres","java");
} catch (SQLException e){
		throw new RuntimeException(e);
}

}
}
[/code]

Cara,

Verifique tua URL, nome de usuário e senha:

return DriverManager.getConnection("jdbc:postgresql://localhost/21:5432","postgres","java");

Repare que vc não indicou a porta de forma correta.
Para as seguintes informações, a URL correta deveria ser a seguinte:
IP: localhost ou 127.0.0.1
PORTA: 5432
USUARIO: postgres
SENHA: java
NOME DO PROJETO: 21 (isso esta correto?)

return DriverManager.getConnection("jdbc:postgresql://localhost:5432/21/","postgres","java");

Tente novamente…
Verifique esse nome de projeto…

Então mudei o fonte para: return DriverManager.getConnection(“jdbc:postgresql://localhost:5432/21/”,“postgres”,“java”)

mas continua, e sim o nome do banco é 21 mesmo, acha que se de repente eu mudar o nome possa funcionar?

Estranho cara…
Vc conseguiu msmo entrar com a Main indicando a URL daquela forma?

Já tentou fazer um teste entrando no banco de dados direto, nessa base, com este usuário e senha?
O erro na aplicação continua o mesmo?

Acredito que o nome da base não influencia… mas n custa tentar…

sim antes já conseguia gravar sem indicar a porta e depois que informei a url desta forma: “jdbc:postgresql://localhost/21:5432”,“postgres”,“java” também continua gravando, segue o fonte da classe TestaInsere e TestaLista e seus respectivos resultados

[code]package br.com.caelum.jdbc.teste;

import java.util.Calendar;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaInsere {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
	Contato contato = new Contato();
	contato.setNome("GUJ");
	contato.setEmail("guj@guj.com.br");
	contato.setEndereco("Rua Teste 24 cj57" );
	contato.setDataNascimento(Calendar.getInstance());
	contato.setTelefoneResidencial("12345678");
	contato.setTelefoneCelular("87654321");
	
	//Grave nessa conexão!!!
	ContatoDAO dao = new ContatoDAO();
	
	//método elegante.
	dao.adiciona(contato);
	System.out.println("Gravado!");
			
}

}[/code]

resultado no console: Conectando ao banco.
Gravado!

[code]package br.com.caelum.jdbc.teste;

import java.util.List;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaLista {

public static void main(String[] args) {

		ContatoDAO dao = new ContatoDAO();
		List<Contato> contatos = dao.getLista();
		
		for (Contato contato:contatos){
			System.out.println ("Nome: "+contato.getNome());
			System.out.println("Email: "+contato.getEmail());
			System.out.println("Endereco: "+contato.getEndereco());
			System.out.println("Data de Nascimento: "+contato.getDataNascimento().getTime()+"\n");
			System.out.println("Telefone Residencial: "+contato.getTelefoneResidencial());
			System.out.println("Telefone Celular: "+contato.getTelefoneCelular());
		}
}

}[/code]

resultado no console: Nome: GUJ
Email: guj@guj.com.br
Endereco: Rua Teste 24 cj57
Data de Nascimento: Mon Jan 23 00:00:00 BRST 2012

Telefone Residencial: 12345678
Telefone Celular: 87654321

Cara…

Parte pro desespero ai…rs

  1. Desliga o servidor Tomcat.

  2. Na aba “Servers” clica com o botão invertido no teu servidor, e depois em “Add and Remove…”

  3. Remove o projeto…

  4. Depois, botão invertido no nome do servidor, e tenta localizar algo parecido com “Clean” ou “Refresh”.

  5. Após fazer isso, verifica se está tudo OK la no Java Build Path e no Deployment Assembly.

  6. Adiciona o projeto novamente no servidor, liga o tomcat e tente novamente.

O erro apresentado ainda é o mesmo?
Não vejo mais solução jow… rs

parada sinistra nao vai nem a pau msm… mas chamando as classes de teste vai… vou tentar colocar outra versao aqui do tomcat.

Brother,

Caso seja possível, zipa teu fonte e anexa ai…
Posso fazer um teste pra ver se ele se conecta com o MySQL…

Posso te mandar esse zip por e-mail Bruno?

Cara,

Faz um teste com o fonte que esta anexado nesse link (persistencia.zip)
http://www.guj.com.br/java/263035-lentidao-em-conexoes-jdbc

Altera URL, cria a base no Postgre e tal…
Esse fonte utilizei em um trabalho e funciounou no MySQL.

Tente criar outro projeto tb…
As vezes rolou alguma falha de bobeira na configuracao…

Caramba Bruno o que me salvou foi um erro meu… troquei na url do jdbc o banco para agenda, sem mudar o nome do banco no postgreSQL, ai a mensagem que apareceu no console foi que o banco agenda nao existia, ai logo vi que a principio conseguiu encontrar o conector já que estava informando que o banco agenda nao existia, ai o que fiz foi resetar o Postgres e agora ta gravando… hehehe tinha até trocado o TOMCAT pelo jetty no desespero… mas valeu mesmo cara muito obrigado.