0

servlet 在 Tomcat 中加载良好。现在我可以很好地访问我的原型 .html 页面,但是当我单击按钮执行 servlet 时,出现以下错误:

HTTP Status 500 - Error instantiating servlet class dbServlet

type Exception report

message Error instantiating servlet class dbServlet

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class dbServlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
root cause

java.lang.ClassNotFoundException: dbServlet
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

下面是我的原型 servlet 的代码:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@SuppressWarnings("serial")
public class databaseServlet extends HttpServlet {
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text.html");
PrintWriter out = response.getWriter();

out.println("<xml version = \"1.0\"?>");
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD " +
"XHTML 1.0 Strict//EN\" \"http://www.w3.org" +
"/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
out.println("<html xmlns = \"http://www.w3.org/1999/xhtml\">");

out.println("<head>");
out.println("<title>MySQL Servlet</title>");
out.println("<style type='text/css'>");
out.println("body{background-color: blue}");
out.println("</style>");
out.println("</head>");

out.println("<body>");
out.println("<h1>The MySQL Servlet Works!</h1>");
out.println("</body>");

out.println("</html>");
out.close();
}
}

有谁知道堆栈跟踪可能意味着什么?

我很感激帮助。

4

2 回答 2

4

java.lang.ClassNotFoundException: dbServlet org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)

从上面的堆栈跟踪:

您的 servlet 是databaseServlet,但您正在调用dbServlet. 好像输入有误web.xml

注意:顺便说一下,java 命名约定建议类名以大写字母开头。

于 2012-11-12T04:55:27.503 回答
1

您没有在问题中包含 Servlet 映射。

java.lang.ClassNotFoundException: dbServlet

您有一个名为的 Servlet databaseServlet,并且您已dbServlet在部署描述符中声明。

您的 Servlet 条目应该是这样的。

例子:

<servlet>
    <servlet-name>DatabaseServlet</servlet-name>
    <servlet-class>controller.DatabaseServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DatabaseServlet</servlet-name>
    <url-pattern>/dbServlet</url-pattern>
  </servlet-mapping>

与问题无关:

尝试使用 MVC 模式,您可以在其中使用 JSP 进行演示,将 Servlet 作为控制器来重定向 Web 应用程序的流程,并将模块作为实体。

于 2012-11-12T05:25:24.327 回答