jsp - 带有 JDBC 的 JSF 项目,我无法在 Servlet 上调用 DAO
问题描述
我在 JSF + JDBC 项目中遇到问题,更具体地说是在我的 servlet 中,我无法调用 DAO 方法,它给了我以下错误
Error connecting: org.gjt.mm.mysql.Driver
abr 14, 2020 12:29:11 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [br.com.cuponsdesconto.controllers.CadastrarUsuario] in context with path [/WebCupom] threw exception
一个有趣的事实是,如果我创建一个测试类并调用我的 DAO 方法,它可以正常工作,见下文
package br.com.cuponsdesconto.controllers;
import br.com.cuponsdesconto.dao.UsuarioDao;
import br.com.cuponsdesconto.entidades.Usuario;
public class TestaInsercaoDeRegistro {
public static void main(String[] args) {
Usuario u = new Usuario();
u.setCpf("123");
u.setEmail("teste");
u.setNome("Arthur");
u.setSenha("123");
new UsuarioDao().adicionar(u);
}
}
也就是说,问题不在于数据库连接,但为什么我不能在 Servlet 中使用我的 DAO?
我会告诉你我的文件是怎样的
我的小服务程序:
package br.com.cuponsdesconto.controllers;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.cuponsdesconto.dao.UsuarioDao;
import br.com.cuponsdesconto.entidades.Usuario;
@WebServlet("/CadastrarUsuario")
public class CadastrarUsuario extends HttpServlet {
private static final long serialVersionUID = 1L;
public CadastrarUsuario() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("I'm here!");
String nome = request.getParameter("nome");
String cpf = request.getParameter("cpf");
String email = request.getParameter("email");
String senha = request.getParameter("senha");
Usuario usuario = new Usuario();
usuario.setNome(nome);
usuario.setCpf(cpf);
usuario.setEmail(email);
usuario.setSenha(senha);
UsuarioDao dao = new UsuarioDao();
dao.adicionar(usuario);
response.getWriter().append("Usuario cadastrado").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
(那个 sout 出现在控制台上,所以这是一个好兆头)
现在让我们看看我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jps</welcome-file>
</welcome-file-list>
</web-app>
最后,这是我的 UsuarioDao
package br.com.cuponsdesconto.dao;
import br.com.cuponsdesconto.entidades.Entidade;
import br.com.cuponsdesconto.entidades.Usuario;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class UsuarioDao extends Dao implements FuncoesDao {
@Override
public boolean adicionar(Entidade entidade) {
Usuario usuario = (Usuario) entidade;
String sql = "insert into usuario (nome, cpf, email, senha) values (?,?,?,?)";
try{
this.conectar();
this.stmt = this.conn.prepareStatement(sql);
this.stmt.setString(1, usuario.getNome());
this.stmt.setString(2, usuario.getCpf());
this.stmt.setString(3, usuario.getEmail());
this.stmt.setString(4, usuario.getSenha());
this.stmt.execute();
System.out.println("Usuario criado com sucesso!");
} catch(SQLException ex){
System.out.println("Erro ao inserir Usuario "+ex.getMessage());
return false;
}
finally{
try {
this.conn.close();
} catch (SQLException ex) {
Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
return true;
}
到处找了,没找到答案,求大神帮忙
解决方案
我的问题的解决方案很简单,JSF 无法连接到数据库,因为WebContent
(存储前端的文件夹)文件夹中没有连接器WEB-INF / lib
,我添加了一个mysql-connector.jar
并且它工作。
当我在(存储或后端的文件夹)中创建测试时/ src
,它可以工作,因为它是具有连接器的项目的一部分。
我不知道执行项目的确切 2 个 mysql 连接器
推荐阅读
- reactjs - 如果数组中只有项目不存在,如何拖放元素 - React DND ES6
- python - Tkinter 列表框和滚动条不显示
- node.js - 节点中的 CORS 阻止 POSTMAN 获取数据?
- aws-lambda - 如何为 lambda 创建 Kinesis 增强型扇出使用者
- ios - 具有方法返回类型 View 的协议
- c# - .NET 配置 - 如何创建易于理解的配置
- c# - json数据提取并使用ajax调用传递给C#
- python - 如何在张量流 SavedModel 中有多个输出?
- unity3d - 统一覆盖组件检查器标题栏
- android - Android BLE:添加没有 UUID 的服务数据