HTTP 状态 500 - 在用户注册中实例化 servlet 类时出错

问题描述 投票:0回答:2

我正在尝试创建一个新的 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>

在这种情况下任何人都可以帮助我,这将非常有帮助...... 谢谢你。

java jsp e-commerce registration createuser
2个回答
2
投票

如果你必须使用 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 那么您的代码应该可以正常工作。


0
投票

ClassNotFoundException 通常发生在 servlet 容器(如 Tomcat)在运行时找不到指定的类时。发生这种情况的原因可能是不正确的类路径、部署问题或缺少已编译的类。

这对我有用:

构建项目: 右键单击 servlet 文件(例如 SignupServlet.java)并选择“Build Project”以确保正确编译 servlet 类。 就我而言,我没有启用自动构建,所以我必须手动进行编辑,这修复了异常

如果问题仍然存在,请尝试:

封装结构: 确保 servlet Java 文件中的包声明与文件所在的实际包结构相匹配。 Java 对包名称很敏感,因此它们必须正确对齐。

类命名和web.xml: 仔细检查 servlet 文件 (web.ControleurServlet) 中的类名,并确保其与 web.xml 配置中指定的相匹配。

重启Tomcat: 重新启动 Tomcat 以确保对应用程序所做的任何更改都能被正确识别和实施。

重新部署应用程序: 尝试清理并重新部署您的应用程序,以消除导致 ClassNotFoundException 的任何残留问题。

© www.soinside.com 2019 - 2024. All rights reserved.