doGet Java Servlet 中的空对象 [重复]

Empty Object in doGet Java Servlet [duplicate]

提问人:Drogo 提问时间:11/17/2023 最后编辑:Drogo 更新时间:11/17/2023 访问量:36

问:

我正在使用一种方法从数据库中获取一些信息并返回包含该数据的 Object。 当我在 Servlet doGet 上使用此方法时,Object 为空。当我在主干上做同样的事情时,它会正确地填充数据。请问有谁知道我做错了什么?

指纹:

in doGet in main

在 doGet 中:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        // TODO Auto-generated method stub
                
        
        Conta conta = ContaDAO.GetConta(2);
        
        double entrada = conta.getEntrada();
        request.setAttribute("entrada", entrada);
        request.getRequestDispatcher("dashboard.jsp").forward(request, response);
    
}

主要:

public static void main(String[] Args) {
    Conta conta = new Conta();
    
    
    conta = ContaDAO.GetConta(2);
    double entrada = conta.getEntrada();
    System.out.println(conta.getEntrada());
    System.out.println(entrada);

这是我正在使用的 Conta 构造函数模型:

public class Conta{

//Atributos
protected int id;
protected String nomeDaConta;
protected double saldo;
protected double gasto;
protected double entrada;
/*protected ArrayList<String> categoriaDeGasto = new ArrayList<String>();
protected ArrayList<String> categoriaDeEntrada = new ArrayList<String>();*/

public Conta() {
    super();
}

这是我正在使用的 ContaDao 方法:

public class ContaDAO {

public ContaDAO() {
    super();
}

 public static Conta GetConta(int id){

    //Connection conexao = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    Conta conta = new Conta();
    Connection conexao;
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
         
        // Com o driver do Oracle já inserido pegando a variavel conexao e passando as credenciais do Oracle
        conexao = DriverManager.getConnection(
                "jdbc:oracle:thin:@oracle.fiap.com.br:1521:ORCL", "RM552501", "270697");
        
        String sqlGetConta = "SELECT DISTINCT CD_CONTA, NR_TOTAL_ENTRADA, NR_TOTAL_SAIDA FROM T_FINEASY_CONTA WHERE CD_CONTA = ? ORDER BY CD_CONTA";
        
        ps = conexao.prepareStatement(sqlGetConta);
        ps.setInt(1, id);
        rs = ps.executeQuery();
        
        while(rs.next()) {
            conta.setId(rs.getInt("CD_CONTA"));
            //System.out.println(conta.getId());
            conta.setEntrada(rs.getInt("NR_TOTAL_ENTRADA"));
            //System.out.println(conta.getEntrada());
            conta.setGasto(rs.getInt("NR_TOTAL_SAIDA"));
            //System.out.println(conta.getGasto());
            
        }
        
    DBConnection.closeconexao(conexao); 
    DBConnection.closeconexaoPS(ps);
    DBConnection.closeconexaoRS(rs);
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }catch(SQLException e) {
        e.printStackTrace();
    }
    
    
    return conta;
}
Java Eclipse Servlet DAO

评论

1赞 dan1st 11/17/2023
您能否分享一个最小的可重现示例,其中包含重现该问题所需的最少代码?
0赞 nitind 11/17/2023
运行该代码的环境是不同的。您如何设置它们,以便这应该在两者中都有效?
0赞 BalusC 11/17/2023
请不要这样做,让代码继续运行,就好像没有发生任何异常情况一样。(重新)抛出它们,以便网页加载立即中止,并出现明显的错误页面。e.printStackTrace()

答:

0赞 Drogo 11/17/2023 #1

这是驱动程序问题。基本上,我的oracle.jdbc驱动程序被“安装”在错误的文件夹结构中。我创建了一个文件夹,将驱动程序文件传输到此文件夹中,并将其添加到构建路径中。

PS:我正在做一个动态的网络项目。 正确的做法是将驱动程序文件传输到文件夹:“WebContent/WEB-INF/lib”,具体取决于我使用的文件结构。

我的教授说,雄猫的问题只能以这种方式看到驾驶员。

谢谢。

评论

0赞 BalusC 11/17/2023
不。这不是与 Tomcat 相关的问题。见上面链接的副本。