【问题标题】:Error instantiating servlet class [org.ran.FristServlet]实例化 servlet 类时出错 [org.ran.FristServlet]
【发布时间】:2019-12-13 10:15:43
【问题描述】:

您好,使用 apache Tomcat 编写代码,我不断收到上述内容。我已经检查了 Web.xml 路径

和web.xml的内容我没有发现任何错误

下面是我的代码和错误信息

index.jsp

FirstServlet

public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
        rd.forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uid = req.getParameter("uid");
        int ph = Integer.parseInt(req.getParameter("ph"));

        HttpSession session = req.getSession();

        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        if (uid != null && ph < 0) {

            try {
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306?user=root&password=Eagle&useSSL=false");

                String sql = "select invno,phone from invnt.allinvoice where invno=? and phone=? ";
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1, uid);
                pstmt.setInt(2, ph);
                rs = pstmt.executeQuery();

                String nid="";
                int nph=0;

                while (rs.next()) {
                    nid=rs.getString(1);
                    nph=rs.getInt(2);
                }
                if(uid==nid && ph==nph) {
                    RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
                    rd.forward(req, resp);
                }else{
                    RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
                    rd.forward(req, resp);
                }

            } catch (ClassNotFoundException | SQLException e) {

                e.printStackTrace();
            }

        } else {
            RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
            rd.forward(req, resp);
        }
    }

错误日志

javax.servlet.ServletException: Error instantiating servlet class [org.ran.FristServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)

Root Cause

java.lang.ClassNotFoundException: org.ran.FristServlet
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1363)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1186)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61

【问题讨论】:

  • 我发现了一个空格 &lt;servlet-name&gt; FirstServlet,它不是 First?
  • @JoopEggen 删除了空间但同样的错误及其 FirstServlet
  • 好吧,我刚刚将 servlet 从第一个重命名为第一个,并在每个地方都更改了它,但它的显示仍然像我没有注意到的那样
  • 编译,创建.war部署。似乎该管道在某个地方出错了。也许其他人也有类似的经历。您可能会停止 tomcat,清理所有可能的目录并重试。

标签: java jsp tomcat servlets


【解决方案1】:

首先从您的 web.xml 中删除所有 servlet 及其 servletmapping 标签,因为 您可以简单地使用注释而不是编写该部署描述符代码。 您的项目结构也受到干扰,您应该 将您的 servlet 放入 src/main/java 并尝试运行它。

还可以像下面这样注释您的课程。

@WebServlet(urlPatterns = "/fs", loadOnStartup = 1)
public class FirstServlet extends HttpServlet {

【讨论】:

  • 有时在创建过滤器或 servlet 时,在 eclipse 的 build 文件夹中不会生成类文件。清理应用程序并构建一次,在上述路径中生成一个 .class 文件。这会在某些情况下消除类未找到错误。您也可以尝试在 Eclipse 工作区中删除 .metadata 隐藏文件夹
猜你喜欢
  • 2015-01-02
  • 2016-06-01
  • 2021-11-14
  • 2018-04-16
  • 1970-01-01
  • 2014-07-03
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多