Отправка кода сервлета в JSP показывает ошибку - PullRequest
0 голосов
/ 24 октября 2018

У меня есть следующий код, который подтверждает форму регистрации.У меня есть два метода, которые проверяют, если «Пароль» и «Подтверждение пароля» совпадают, и отправляет сообщение об ошибке, если нет, а также checkEmail (), который проверяет БД, если электронная почта уже существует.Когда я не включаю метод checkEmail (), другой работает нормально (даже сообщение об ошибке).Но когда я включаю checkEmail (), он выдает сообщение об ошибке NullPointerException.Я считаю, что это связано с включением метода checkEmail () в мой код, но я не уверен, куда его поместить.Буду признателен, если кто-нибудь сможет мне помочь.

// МЕТОД doPost СЕРВЛЕТА

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        HttpSession s = request.getSession();
        UserInfo ud = new UserInfo(); 
        ud.createTable();
        UserBean u = new UserBean();
        ServletContext ctx = s.getServletContext();

            u.setEmail(request.getParameter("email"));
            u.setName(request.getParameter("name"));
            u.setLname(request.getParameter("sname"));
            u.setPassword(request.getParameter("password"));
            s.setAttribute("User", u);
            String e = u.getEmail();
            String p1 = u.getPassword();
            String p2 = request.getParameter("password2");

            if(User.confirmPassword(p1, p2) && !User.checkEmail(e)) {

            //Save data to DB
            u = (User)s.getAttribute("User");
            s.invalidate();
            ud.insert(u);
            forwardTo(ctx, request, response, "/Somepage.jsp");

            } else {
                if(User.checkEmail(e)) {
                        request.setAttribute("name",request.getParameter("name"));
                        request.setAttribute("sname",request.getParameter("sname"));
                        request.setAttribute("email",request.getParameter("email"));
                        request.setAttribute("pass", request.getParameter("password"));
                        request.setAttribute("pass2", request.getParameter("password2"));
                        request.setAttribute("errorMessage", "Email already exists!");
                        request.getRequestDispatcher("/SignUp.jsp").forward(request, response);
                }
                if(!User.confirmPassword(p1, p2)) {
                request.setAttribute("name",request.getParameter("name"));
                request.setAttribute("sname",request.getParameter("sname"));
                request.setAttribute("email",request.getParameter("email"));
                request.setAttribute("pass", request.getParameter("password"));
                request.setAttribute("pass2", request.getParameter("password2"));
                request.setAttribute("errorMessage", "Passwords do not match!");
                request.getRequestDispatcher("/SignUp.jsp").forward(request, response);
                    }
                } 
            }   

// ФОРМА РЕГИСТРАЦИИ

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>User Registration</title>
</head>
<body>
<form action = "UserServ" method ="POST">
<h5 >Enter the details below to Sign Up</h5><br>
Name: <input type="text" name="name" required placeholder="Firstname" value="${name}"><br>
Surname: <input type="text" name="sname" required placeholder="Surname" value="${sname}"><br>
Email: <input type="text" value="${email}" name="email" placeholder="Email"><br>
Password:
<input type="password" value="${pass}" name="password" placeholder="Password"  required><br>
Confirm password:
<input type="password" name="password2" value="${pass2}" placeholder="Confirm password" required><br>
<div style="color: #FF0000;">${errorMessage}</div><br>
<input type="submit" value="Sign Up">
</form>
</body>
</html>
</body>
</html>

// МЕТОДЫ

public static boolean confirmPassword(String p1, String p2){          
        boolean status = false;  
        if(p1.equals(p2)) {
        status =true;  
        }
        return status;
    }


    public static boolean checkEmail(String email) {
        boolean check = false;
         PreparedStatement pst = null;  
            ResultSet rs = null;  
            try(Connection conn= ConnectionConfiguration.getConnection()){
                pst = conn.prepareStatement("SELECT * FROM users WHERE email=?;");  
                pst.setString(1, email);  

                check = rs.next();  
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return check;  
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

ResultSet никогда не рассчитывается, так как подготовленный оператор никогда не выполняется.Это приводит к NPE при выполнении rs.next().

Добавьте вот это после установки электронного письма:

rs = preparedStatement.executeQuery();

Это выполнит подготовленный оператор с заданными параметрами и вернет искомый ResultSet.

Кстати:

Пожалуйста, рассмотрите возможность использования rs.isBeforeFirst() вместо rs.next() для проверки, есть ли результат.В вашем случае это будет работать, потому что вы не читаете ни одной строки, но если вам нужно будет сбросить курсор, так как rs.next() перемещает курсор на следующую строку, если имеется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...