Servlet não chama método dao externo

Por favor estou tentando através de uma servlet java chamar da classe ProdutoDao um método responsável por inserir os dados no banco de dados mySql porém
Quando utilizo uma classe main para instanciar uma
Classe produto inserindo no construtor os dados e chamando a classe ProdutoDao e metodo dao
Funciona muito bem os dados são inseridos com sucesso porem quando tento acessar de uma servlet ao dao apresenta erro que vem da classe responsavel pela conexão driver jdbc não entendo porque não funciona através de uma servelt e funciona sem a servlet

Posta o código da servlet pra gente ver como vc está fazendo.

segue a servelt que recebe uma requisição de uma jsp instanciando a classe Produto
que recebe como argumento descrição,quantidade,preço,online,
em seguida chama o método salvar() da classe Produto.

package projetocontroller;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import model.Produto;

/**

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

    /**

    • @see HttpServlet#HttpServlet()
      */
      public controll() {
      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
      response.getWriter().append("Served at: ").append(request.getContextPath());
      }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      request.setCharacterEncoding(“UTF-8”);
      response.setContentType(“text/html; charset=UTF-8”);

      String descricao = request.getParameter(“decricao”);
      int quantidade = Integer.parseInt(request.getParameter(“quantidade”));
      double preco = Double.parseDouble(request.getParameter(“preco”));
      boolean online = false;

      Produto produto = new Produto(descricao,quantidade,preco,online);
      produto.salvar();

    }

}

Segue a classe Produto

package model;

import projetoDao.ProdutoDao;

public class Produto {
private int idProduto;
private String descricao;
private Integer quantidade;
private Double preco;
private Boolean online;

public Produto() {}

public Produto(int IdProduto, String descricao, Integer quantidade, Double preco, boolean online ) {
	this.idProduto = idProduto;
	this.descricao = descricao;
	this.quantidade = quantidade;
	this.preco = preco;
	this.online = online;
}

public Produto(String descricao, int quantidade, double preco,boolean online) {
	this.descricao = descricao;
	this.quantidade = quantidade;
	this.preco =  preco;
	this.online = online;
}

public Integer getIdProduto() {
	return idProduto;
}

public void setIdProduto(Integer idProduto) {
	this.idProduto = idProduto;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public int getQuantidade() {
	return quantidade;
}

public void setQuantidade(Integer quantidade) {
	this.quantidade = quantidade;
}

public double getPreco() {
	return preco;
}

public void setPreco(Double preco) {
	this.preco = preco;
}

public boolean isOnline() {
	return online;
}

public void setOnline(Boolean online) {
	this.online = online;
}
public void salvar(){
	System.out.println("metodo chamado");
	new ProdutoDao().cadastrarProduto(this);;
}

}

classe ProdutoDao

package projetoDao;

import java.sql.Connection;
import java.sql.PreparedStatement;

import model.Produto;

public class ProdutoDao {

public void cadastrarProduto(Produto produto) {
	
	String sql = "INSERT INTO PRODUTO VALUES(null,?,?,?,?)";
	PreparedStatement pStatement = null;
	Connection conn = null;

	
	try {
		conn = new MySqlConnection().getConnection();
		pStatement = conn.prepareStatement(sql);
		pStatement.setString(1, produto.getDescricao());
		pStatement.setInt(2, produto.getQuantidade());
		pStatement.setDouble(3, produto.getPreco());
		pStatement.setBoolean(4, produto.isOnline());
		pStatement.execute();
		
	} catch (Exception e) {
		e.printStackTrace();
		
	}finally {
		try {
			if(pStatement != null)
				pStatement.close();
			
		} catch (Exception e2) {
			e2.printStackTrace();
			
		}
		
		try {
			if(conn != null)
				conn.close();
			
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
		
		
	
	
}

}

Classe para conexão com banco

package projetoDao;

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

public class MySqlConnection {

public Connection getConnection() {
	
	Connection conn = null;
	
	try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		
	} catch (Exception e) {
		System.out.println("Erro no driver");
		e.printStackTrace();
	}
	try {
		
		conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/banana","root","2525");
		
	} catch (Exception e) {
		e.printStackTrace();
	}

	return conn;
}

}

Está capturando Exception ```
catch (Exception e) {
System.out.println(“Erro no driver”);
e.printStackTrace();

metodo chamado

Erro no driver

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

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1353)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1165)

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

at java.base/java.lang.Class.forName(Class.java:375)

at projetoDao.MySqlConnection.getConnection(MySqlConnection.java:13)

at projetoDao.ProdutoDao.cadastrarProduto(ProdutoDao.java:18)

at model.Produto.salvar(Produto.java:70)

at projetocontroller.controll.doPost(controll.java:46)

at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)

at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)

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

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

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

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

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

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

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

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)

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

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

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673)

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

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

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)

at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)

at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.base/java.lang.Thread.run(Thread.java:840)

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

at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706)

at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)

at projetoDao.MySqlConnection.getConnection(MySqlConnection.java:21)

at projetoDao.ProdutoDao.cadastrarProduto(ProdutoDao.java:18)

at model.Produto.salvar(Produto.java:70)

at projetocontroller.controll.doPost(controll.java:46)

Quando cria um objeto Produto na Classe Main Programa principal
e atribuo os dados nos construtor da classe Produto e chamo o método salvar()
funciona muito bem mas quando esse metodo é chamado da servlet apresenta Erro.

O driver do MySQL não está no classpath da sua aplicação WEB.

Adicionei o driver mysql-connector-j-8.1.0.jar no build path tentei mudar o driver por outros anteriores mas não funcionou

Tem certeza de que esse JAR está na pasta WEB-INF/lib da sua aplicação web?

Não esta na pasta WEB-INF lib
Ele esta no projeto uma pasta Referenced Libraries

tenta colocar na pasta WEB-INF/lib e veja se funciona.

Como que Posso colocar o driver na pasta lib?

Copia o arquivo jar para a pasta WEB-INF/lib, vc consegue fazer pela IDE ou pelo navegador de pastas do sistema msm.

Não deu certo, vou criar o mesmo aplicativo mas em uma maquina virtual com outro S.O pra ve se roda

Posta a estrutura de pastas da sua aplicação web.

Se o driver não estiver no classpath da aplicação, vai continuar falhando, não tem nada a ver com o sistema operacional.

Quando testo o Objeto Produto fora da servlet por exemplo em uma classe Main funciona perfeitamente

Produto produto = new Produto(‘String’ ,1,1.0,false);
produto.salvar();

Dados foram inseridos no banco de dados