Servlet中带有数据库的Java Mail API,错误为NullPointerException

Servlet中带有数据库的Java Mail API,错误为NullPointerException,java,database,jsp,servlets,Java,Database,Jsp,Servlets,我正在从我的数据库向注册学生发送电子邮件,并获取用户的电子邮件地址。通过检查数据库中的电子邮件,我使用smtp服务器向用户发送一封关于其prn(即id)和密码的电子邮件。我有一个servlet、一个模型类和一个jsp。我已经附上了代码的屏幕截图。谢谢,这是个很小的问题,一定要帮忙。我是一名学生。提前感谢。:)我只得到一个错误,它是NullPointerException package com.student.connection; import java.sql.Connection; imp

我正在从我的数据库向注册学生发送电子邮件,并获取用户的电子邮件地址。通过检查数据库中的电子邮件,我使用smtp服务器向用户发送一封关于其prn(即id)和密码的电子邮件。我有一个servlet、一个模型类和一个jsp。我已经附上了代码的屏幕截图。谢谢,这是个很小的问题,一定要帮忙。我是一名学生。提前感谢。:)我只得到一个错误,它是NullPointerException

package com.student.connection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.Transport;
import javax.activation.*;

public class Mailer {

private Connection conn = null;
private PreparedStatement ps = null;
private Statement stmt = null;
private ResultSet rs = null;

public void send(String emailaddress) throws SQLException, ClassNotFoundException {
    int prn = 0;
    final String username = "12030142084@sicsr.ac.in";
    final String password = "mypassword";
    String email = new String();
    String pass = new String();

    System.out.println("Test");
    String query = "select prn,email,password from studentdetails where email=" + emailaddress;

    conn = DBConnection.createDBConnection();
    stmt = conn.createStatement();
    rs = stmt.executeQuery(query);

    while (rs.next()) {
        prn = rs.getInt(1);
        email = rs.getString("email");
        pass = rs.getString("password");
    }

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });
    try {

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("12030142084@sicsr.ac.in"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(email));
        message.setSubject("Password Recover");
        message.setText("Your Prn is " + prn + "You Password is " + pass);

        Transport.send(message);

        System.out.println("Email Sent Succsessfully");

    } catch (MessagingException e) {
        //throw new RuntimeException(e);
    } finally {
        conn.close();
    }
}
}



Jsp文件是正确的,它只需要一个用户输入,id是emailadd


有人请帮忙。

那是因为
mailer
尚未初始化

private Mailer mailer; // you're just declaring mailer
...
mailer.send("emailaddress"); // without initialization you're trying to call a method on it.
init()
方法中,需要执行以下操作:-

mailer = new Mailer(); // just an example. But you need to initialize your mailer.

将导致NullPointerException,因为在servlet代码中没有初始化
邮件程序的位置。mailer对象初始化为null,对其调用任何方法都将导致NPE。在调用send或任何其他方法之前,请确保先初始化它。

谢谢。我现在已经初始化了。。但我发现了一些新错误:警告:StandardWrapperValve[ContactServlet]:PWC1406:Servlet.service()对于servlet ContactServlet抛出异常org.apache.derby.client.am.SqlException:“EMAILADDRESS”列不在FROM列表中的任何表中,或者出现在联接规范中,并且不在联接规范的范围内,或者出现在HAVING子句中,并且不在GROUP BY列表中。如果这是CREATE或ALTER TABLE语句,则“EMAILADDRESS”不是目标表中的列。在org.apache.derby.client.am.Statement.completeSqlca(未知源代码)上,您的查询似乎存在一些问题。不幸的是,这不属于这个问题的范围。请关闭此问题并将该问题作为单独问题发布。String query=“从studentdetails中选择prn、电子邮件、密码,其中email=“+emailaddress;只要检查一下。。如果你能建议的话,那真的很有帮助。我会马上关闭的我已经初始化了长官。。但现在我得到了这个错误:WARNING:StandardWrapperValve[ContactServlet]:PWC1406:Servlet.service()对于servlet ContactServlet抛出异常org.apache.derby.client.am.SqlException:“EMAILADDRESS”列不在FROM列表中的任何表中,或者出现在联接规范中,并且不在联接规范的范围内,或者出现在HAVING子句中,并且不在GROUP BY列表中。如果这是CREATE或ALTER TABLE语句,则“EMAILADDRESS”不是目标表中的列。在org.apache.derby.client.am.Statement.completeSqlca(未知源代码)中,在init方法中初始化
mailer
。。。
private Mailer mailer; // you're just declaring mailer
...
mailer.send("emailaddress"); // without initialization you're trying to call a method on it.
mailer = new Mailer(); // just an example. But you need to initialize your mailer.
        mailer.send("emailaddress"); // here is the error