簡體   English   中英

HTTP 狀態 500 - 在用戶注冊中實例化 servlet 類時出錯

[英]HTTP Status 500 - Error instantiating servlet class in user registration

我正在嘗試在我的電子商務應用程序中創建一個用於注冊的新 servlet。

收到此錯誤

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)

我正在使用 apache tomcat 版本 10.0.20。 我創建了 servlet 來接受來自用戶的數據並將其輸入數據庫(簡而言之,為我的電子商務創建用戶)。 我所有的映射看起來都很好,servlet 代碼也很好,我不知道我的代碼有什么問題。 我嘗試了很多清理和構建的東西,但它仍然無法正常工作。 我的servlet文件...

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>

}

我的 web.xml 文件

<?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>

我已經在jsp中使用了servlet ...

<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>

任何人都可以在這種情況下幫助我,這將非常有幫助......謝謝。

如果您必須使用 tomcat v10,那么您必須將您正在使用的 servlet-api 從 Java.servlet-api 更改為 Jakarta.servlet-api,在 pom.xml 中替換

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

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

您的所有導入都應從 import javax.servlet.* 更改為 import jakarta.servlet.*。

如果您可以將 tomcat 版本降級到 9,那么您的代碼應該可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM