[RESOLVIDO]ajuda pacote javax.servlet.*;

16 respostas
A
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.
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)

Alguém saberia dizer onde errei?

Desde já agradeço.

16 Respostas

B

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…

A

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:

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.<init>(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

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.

B

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”.

A

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

B

Puts,

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

A
Segue os fontes da Servlet, do ContatoDAO e da fábrica de conexoes.
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>");
	}

}
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);
		}
	}
}
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);
	}
}
}
B

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…

A

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?

B

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…

A

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

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("[email removido]");
		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!");
				
	}

}

resultado no console: Conectando ao banco.
Gravado!

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());
			}
	}

}

resultado no console: Nome: GUJ
Email: [email removido]
Endereco: Rua Teste 24 cj57
Data de Nascimento: Mon Jan 23 00:00:00 BRST 2012

Telefone Residencial: 12345678
Telefone Celular: 87654321

B

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

A

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

B

Brother,

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

A

Posso te mandar esse zip por e-mail Bruno?

B

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…

A

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.

Criado 23 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 16
Participantes 2