Search code examples
javajspe-commerceregistrationcreateuser

HTTP Status 500 - Error instantiating servlet class in user registration


I am trying to create a new servlet for signup in my eCommerce application.

Getting this error

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Error instantiating servlet class [com.miniproject.famms.servlets.SignupServlet]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

jakarta.servlet.ServletException: Error instantiating servlet class [com.miniproject.famms.servlets.SignupServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:356)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:867)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1716)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:833)

I am using apache tomcat version 10.0.20. I have created the servlet to accept the data from the user and enter it into the database( in short creating user for my eCommerce). All my mapping looks good and the servlet code as well, I don't know what's wrong in my code. I tried many things doing clean and build but it's still not working. my servlet file...

package com.miniproject.famms.servlets;

import com.miniproject.famms.entities.User;
import com.miniproject.famms.helper.FactoryProvider;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class SignupServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try ( PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            
            try {
                
                String userName = request.getParameter("user_name");
                String userEmail = request.getParameter("user_email");
                String userPassword = request.getParameter("user_password");
                String userPhone = request.getParameter("user_phone");
                String userAddress = request.getParameter("user_address");

                // validations
                if (userName.isEmpty()) {
                    out.println("Name is blank ");
                    return;
                }
                //creating user object to store data
                User user = new User(userName, userEmail, userPassword, userPhone, "default.jpg", userAddress, "normal");
                Session hibernateSession = FactoryProvider.getFactory().openSession();
                Transaction tx = hibernateSession.beginTransaction();                
                int userId = (int) hibernateSession.save(user);                
                tx.commit();
                hibernateSession.close(); 
                HttpSession httpSession = request.getSession();
                httpSession.setAttribute("message", "Registration Successful !! User id is " + userId);                
                response.sendRedirect("register.jsp");
                return;
                
            } catch (Exception e) {
                e.printStackTrace();
                
                
                
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

my web.xml file

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
        <servlet-name>SignupServlet</servlet-name>
        <servlet-class>com.miniproject.famms.servlets.SignupServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SignupServlet</servlet-name>
        <url-pattern>/SignupServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

And I have use the servlet in the jsp...

<form action="SignupServlet" method="post">

            <div class="form-group">
               <div class="input-group">
                  <span class="input-group-addon"><i class="fa fa-user ti-user"></i></span>
                  <input name="user_name" type="text" class="form-control" placeholder="Your name">
               </div>
            </div>
            
            <hr class="hr-xs">
            <div class="form-group">
                <div class="input-group">
                   <span class="input-group-addon"><i class="fa fa-envelope ti-email"></i></span>
                   <input name="user_email" type="email" class="form-control" placeholder="Your email">
                </div>
             </div>
             <hr class="hr-xs">

            <div class="form-group">
               <div class="input-group">
                  <span class="input-group-addon"><i class="fa fa-lock ti-unlock"></i></span>
                  <input name="user_password" type="password" class="form-control" placeholder="Choose a password">
               </div>
            </div>
            <hr class="hr-xs">

            <div class="form-group">
               <div class="input-group">
                  <span class="input-group-addon"><i class="fa fa-phone ti-phone"></i></span>
                  <input name="user_phone" type="number" class="form-control" placeholder="your phone number">
               </div>
            </div>

            <hr class="hr-xs">

            <div class="form-group">
               <div class="input-group">
                  <span class="input-group-addon"><i class="fa fa-map-marker ti-map"></i></span>
                  <textarea name="user_address" id="" cols="30" rows="3" class="form-control" placeholder="your Address"></textarea>
               </div>
            </div>
            <button class="btn btn-primary btn-block" >Sign up</button>

         </form>

Can anybody help me in this situation it would be very helpful... Thankyou.


Solution

  • If you have to use tomcat v10 then you have to change the servlet-api you are using from Java.servlet-api to Jakarta.servlet-api, in pom.xml replace

    <dependency>
        <groupId>java.servlet</groupId>
        <artifactId>java.servlet-api</artifactId>
        <version>4.0.1</version><!--whatever version 
    </dependency>
    

    with

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
    </dependency>
    

    All your imports should be changed from import javax.servlet.* to import jakarta.servlet.*.

    If you can downgrade the tomcat version to 9 then your code should work just fine.