Passagem de parametros para servlet

10 respostas
Q

Ola Boa tarde.

Eu to criando um pequeno sistema de vendas pela web, o banco é My Sql e possuo apenas três tabelas (venda,cliente e produto), ainda não criei todas as intefaces até mesmo por que eu ainda estou com dificuldade na primeira parte.

O problema é o seguinte: eu crio a pagina HTML, consigo mapear um servlet pelo xml. Quando envio os dados do html para o servlet preencher o clienteModel(geters e seters) os dados são recebidos, o erro acontece no cliente dao. Na exception é exibido null pointer exception.

Bem pelo que entendo a unica possibilidade de ocorrer esse tipo de erro é no PreparedStatement, na hora de inserir no banco.
O estranho mesmo é o que acontece com o html e o servlet, se eu remover o ClienteDAO e montar um dispatcher pelo servlet a pagina invocada no dispatcher exibe os dados do cliente normalmente.

Outro erro que ocorre também é de conexão ou inicialização do banco de dados.
Eu criei minha classe de conexão (ConnectionFactory) com um metodo que retorna uma connection quando é instaciado.
Quando eu crio uma classe com o metodo main e testo a classe de conexão a mesma executa e quando eu rodo a aplicação ocorre o erro (no suitable class) .

Alguém poderia me ajudar

Cesar.

10 Respostas

L

Opa… blz?
Posta o codigo e o log de erro tb…

Abs

Q

Este é o log de erro.

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at br.com.jdbc.JDBC.getConnection(JDBC.java:14)

at br.com.dao.ClienteDAO.(ClienteDAO.java:20)

at br.com.servlet.Adiciona.service(Adiciona.java:72)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Unknown Source)

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sistemadevendas

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at br.com.jdbc.JDBC.getConnection(JDBC.java:20)

at br.com.dao.ClienteDAO.(ClienteDAO.java:20)

at br.com.servlet.Adiciona.service(Adiciona.java:72)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Unknown Source)

Essa é a classe de acesso ao banco.

package br.com.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class JDBC {

private Connection connection;

public Connection getConnection()throws SQLException{
	 
	try {
		Class.forName("com.mysql.jdbc.Driver");	
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		System.out.println("classe nao encontrada");
		e.printStackTrace();
	}
return connection = DriverManager.getConnection("jdbc:mysql://localhost/sistemadevendas","root","654321");

}

}

Essa é a classe ClienteDAO.

package br.com.dao;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import br.com.jdbc.JDBC;
import br.com.modelo.ClienteModel;

public class ClienteDAO {

private Connection connection;

public ClienteDAO(){
	
	try {
		connection = new JDBC().getConnection();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
}
public void adiciona(ClienteModel cliente){
 String insere="insert into cliente (cpf,nome,email,data_cadastro) values(?,?,?,?)";
 
 try {
	PreparedStatement pstm = connection.prepareStatement(insere);
	 pstm.setLong(1,cliente.getCpf());
	 pstm.setString(2,cliente.getNome());
	 pstm.setString(3,cliente.getEmail());
	 pstm.setDate(4,new Date (cliente.getData_cadastro().getTimeInMillis()));
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
 
}

}

Esse é o servlet Adiciona.

package br.com.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.dao.ClienteDAO;
import br.com.modelo.ClienteModel;

/**

  • Servlet implementation class Adiciona
    
    */
    
    public class Adiciona extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    

    /**

    • @see HttpServlet#HttpServlet()
      */
      public Adiciona() {
      super();
      // TODO Auto-generated constructor stub
      }

    /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      }
      public void service(HttpServletRequest request,HttpServletResponse response)
      throws ServletException,IOException{
      PrintWriter out= response.getWriter();
    String nome=request.getParameter(nome);
    
    long cpf=Long.parseLong(request.getParameter(cpf));
    
    String email=request.getParameter(email);
    
    String dataEmTexto=request.getParameter(data);
    
    Calendar data=null;
    
    try {
    
    Date date=new SimpleDateFormat(dd/MM/yyyy).parse(dataEmTexto);
    
    data = Calendar.getInstance();
    
    data.setTime(date);
    
    } catch (ParseException e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    }
    
    ClienteModel clienteModel =new ClienteModel();
    
    clienteModel.setCpf(cpf);
    
    clienteModel.setData_cadastro(data);
    
    clienteModel.setNome(nome);
    
    clienteModel.setEmail(email);
    

    ClienteDAO dao = new ClienteDAO();
    dao.adiciona(clienteModel);

    out.print("");
    
    out.print("");
    
    out.print("<OK "+clienteModel.getNome());
    
    out.print("OK "+clienteModel.getCpf());
    
    out.print(OK +clienteModel.getEmail());
    
    out.print(OK +clienteModel.getData_cadastro());
    
    out.print(””);
    
    out.print(””);
    
    }
    
    }
    

Essa é a pagina.

Insert title here Nome:
E-mail:
CPF:
Danta:

E esse é o xml.

<?xml version="1.0" encoding="UTF-8"?> sistema index.html index.htm index.jsp default.html default.htm default.jsp Adiciona Adiciona br.com.servlet.Adiciona Adiciona /Adiciona

Segue tamém uma print da disposição de como estão organizadas as pastas.

Valeu pela ajuda.

Q

L

Opa… cara nem olhei o resto do teu código, mas a linha abaixo indica que não localizou o driver do mysql, tu adicionou este jar na tua aplicação?

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Q

Coloquei.

Cara eu tirei um print da tela que mostra como esta a organização do projeto.
Vc sabe como anexar uma imagem a este tópico?

L

Tu tens certeza que tu adicionou o jar no projeto?
Esse erro é porque ele não achou a classe… tu configurou certinho o teu build path?

Q

Coloquei me passa teu e-mail que te mando um print da imagem de como estão organizadas as pastas.

Q
quintacs:
Este é o log de erro.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at br.com.jdbc.JDBC.getConnection(JDBC.java:14)
	at br.com.dao.ClienteDAO.<init>(ClienteDAO.java:20)
	at br.com.servlet.Adiciona.service(Adiciona.java:72)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sistemadevendas
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.jdbc.JDBC.getConnection(JDBC.java:20)
	at br.com.dao.ClienteDAO.<init>(ClienteDAO.java:20)
	at br.com.servlet.Adiciona.service(Adiciona.java:72)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)


Essa é a classe de acesso ao banco.

package br.com.jdbc;

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

public class JDBC {

	private Connection connection;
	
	public Connection getConnection()throws SQLException{
		 
		try {
			Class.forName("com.mysql.jdbc.Driver");	
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("classe nao encontrada");
			e.printStackTrace();
		}
	return connection = DriverManager.getConnection("jdbc:mysql://localhost/sistemadevendas","root","654321");
	
	}
}


Essa é a classe ClienteDAO.


package br.com.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.jdbc.JDBC;
import br.com.modelo.ClienteModel;



public class ClienteDAO {

	private Connection connection;
	
	public ClienteDAO(){
		
		try {
			connection = new JDBC().getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
	}
	public void adiciona(ClienteModel cliente){
	 String insere="insert into cliente (cpf,nome,email,data_cadastro) values(?,?,?,?)";
	 
	 try {
		PreparedStatement pstm = connection.prepareStatement(insere);
		 pstm.setLong(1,cliente.getCpf());
		 pstm.setString(2,cliente.getNome());
		 pstm.setString(3,cliente.getEmail());
		 pstm.setDate(4,new Date (cliente.getData_cadastro().getTimeInMillis()));
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	 
	}
		
	
}


Esse é o servlet Adiciona.



package br.com.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.dao.ClienteDAO;
import br.com.modelo.ClienteModel;


/**
 * Servlet implementation class Adiciona
 */
public class Adiciona extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Adiciona() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
    public void service(HttpServletRequest request,HttpServletResponse response)
               throws ServletException,IOException{
	  PrintWriter out= response.getWriter();
	  
	  String nome=request.getParameter("nome");
	  long cpf=Long.parseLong(request.getParameter("cpf"));
	  String email=request.getParameter("email");
	  String dataEmTexto=request.getParameter("data");
	  Calendar data=null;
	  
	  try {
		Date date=new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
		  data = Calendar.getInstance();
		  data.setTime(date);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  ClienteModel clienteModel =new ClienteModel();
	  clienteModel.setCpf(cpf);
	  clienteModel.setData_cadastro(data);
	  clienteModel.setNome(nome);
	  clienteModel.setEmail(email);
	  
	  ClienteDAO dao = new ClienteDAO();
	  dao.adiciona(clienteModel);
	  
	  out.print("<html>");
	  out.print("<body>");
	  out.print("<OK "+clienteModel.getNome());
	  out.print("OK "+clienteModel.getCpf());
	  out.print("OK "+clienteModel.getEmail());
	  out.print("OK "+clienteModel.getData_cadastro());
	  out.print("</body>");
	  out.print("</html>");
   }
}


Essa é a pagina.



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

 <form action="Adiciona">
   Nome: <input type="text" name="nome"/><br/>
   E-mail: <input type="text" name="email"/><br/>
   CPF: <input type="text" name="cpf"/><br/>
   Danta: <input type="text" name="data"/><br/>
   <input type="submit" value="Gravar"/>
 </form>

</body>
</html>



E esse é o xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>sistema</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <description></description>
    <display-name>Adiciona</display-name>
    <servlet-name>Adiciona</servlet-name>
    <servlet-class>br.com.servlet.Adiciona</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Adiciona</servlet-name>
    <url-pattern>/Adiciona</url-pattern>
  </servlet-mapping>
  
</web-app>

Segue tamém uma print da disposição de como estão organizadas as pastas.

Valeu pela ajuda.

Pessoal ta acontecendo um erro muito estranho.

Eu reconstrui todo o sistema minuciosamente e o mesmo erro contiua acontecendo.
Coloquei o driver do mysql no build path do projeto e o erro persiste.

Alguém pode me ajudar.

Grato.

Ygor

Boa tarde Cesar;

Coloque o jar do mysql dentro da pasta lib do web-inf e veja se funciona.
Qualquer coisa poste aí

Q

Ygor:
Boa tarde Cesar;

Coloque o jar do mysql dentro da pasta lib do web-inf e veja se funciona.
Qualquer coisa poste aí

Ygor, eu baixei um novo eclipse, eu esta usando o galileo e baixei o europa, e parece ser um pouco melhor, ele esta me auxiliando bem.
Quando o erro foi gerado ele me indicou uma solução um pouco melhor e ao explorar as alternativas eu mandei ele resolver o problema sozinho e o eclipse criou uma pasta chamada .JETEmitters no workspace e tudo se resolveu como num passe de mágica.

Ygor , Grato pela ajuda.

Criado 10 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 10
Participantes 3