Reputation:
I am working on a small jakarta ee project for a software engineering course I am taking. I am to connect a database to store user input from a form into the database using a servlet. I removed the parameter instances from the method because when I instantiated them in the method, their values were not being updated in the database and only returned null, but now my code keeps returning the nullPointerException
because the return value of ServletConfig().getServletContext()
is null
.
This is the servlet code (UserDao runs the connection and Users stores the input values):
package org.example.serious.controller;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import org.example.serious.model.UserDao;
import org.example.serious.connections.DataBaseConnections;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.example.serious.model.Users;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
@WebServlet(name = "signupServlet", value = "/signup-servlet")
public class SignupServlet extends HttpServlet {
private UserDao userDao;
public HttpServletRequest request = (HttpServletRequest) getServletContext().getRequestDispatcher("/index.jsp");
private HttpServletResponse response;
public String name = request.getParameter("name");
public String email = request.getParameter("email");
public String password = request.getParameter("password");
public String phone = request.getParameter("phone");
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext context = this.getServletContext();
try {
Connection connection = DataBaseConnections.getConnection();
this.userDao = new UserDao(connection);
} catch (ClassNotFoundException| SQLException e) {
throw new RuntimeException("Error initializing database connection", e);
}
}
@Override
public void doGet(HttpServletRequest Request, HttpServletResponse Response) throws ServletException, IOException {
request = Request;
this.response = Response;
getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
}
@Override
public void doPost(HttpServletRequest Request, HttpServletResponse Response) throws ServletException, IOException {
request = Request;
this.response = Response;
System.out.println("Received request to register user " + name);
System.out.println("Received request to register user " + email);
System.out.println("Received request to register user " + password);
System.out.println("Received request to register user " + phone);
if (name == null || email == null || password == null || phone == null || name.isEmpty() || email.isEmpty() || password.isEmpty() || phone.isEmpty()) {
request.setAttribute("errorMessage", "All fields are required.");
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
Users user = new Users();
if (userDao == null) {
throw new ServletException("Database connection error. Please try again later.");
}
try {
userDao.save(user); // Save user to the database
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
response.sendRedirect("success.jsp"); // Redirect to success page
}
}
This is the code for the connector(I am using Mongodb because SQL refuses to run on my machine):
package org.example.serious.connections;
import org.example.serious.model.Users;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.example.serious.controller.SignupServlet;
public class MongoConnector {
public static MongoClient mongo = MongoClients.create("mongodb://localhost:27017");
public static MongoDatabase database = mongo.getDatabase("Users");
public static MongoCollection<Document> collection = database.getCollection("Users");
public static void connect() {
Users user = new Users();
SignupServlet sign = new SignupServlet();
System.out.println("Connected to database");
Document document = new Document();
document.put("_id", "67ab03de9g44u3336d055056b");
document.put("Name",user.setName(sign.name));
document.put("Email",user.setEmail(sign.email));
document.put("Password",user.setPassword(sign.password));
document.put("Phone",user.setPhone(sign.phone));
collection.insertOne(document);
mongo.close();
}
}
I have tried various ways to solve the nullPointerException
including adding super.init(config)
to the overridden init()
class and nothing has worked. Is there a way around it, or do I need to start over and try a different way?
Upvotes: 0
Views: 27