【发布时间】:2014-04-21 08:42:45
【问题描述】:
所以我试图让一个简单的 Hello World 应用程序使用 Java servlet 工作。这是针对我正在学习的 Web Apps 课程的。我的问题是我不断收到一条错误消息,说找不到我的“HelloCedarville.class”文件。
我已经尝试了很多方法来让它发挥作用:
- 一开始我在没有java包的情况下尝试了这个,换句话说.class文件直接在/WEB-INF/classes下,但这不起作用。
- 接下来我尝试使用 java 包(因为许多类似问题的答案都建议使用 java 包)。我确保编译的java类“HelloCedarville.class”在/WEB-INF/classes/com下,并且那个“package com;”位于“HelloCedarville.java”的顶部。
- 我已多次检查我的“web.xml”文件,以确保我正确映射到 servlet。
- 我尝试重新编译java文件并重新测试,看看它是否能找到.class文件。
- 我尝试删除“HelloCedarville.java”和“HelloCedarville.class”并重新创建它们。
我只是不知道是什么导致了这个错误。这是完整的错误:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Wrapper cannot find servlet class com.HelloCedarville or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705)
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
java.lang.Thread.run(Thread.java:724)
root cause
java.lang.ClassNotFoundException: com.HelloCedarville
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705)
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
java.lang.Thread.run(Thread.java:724)
这是 web.xml 文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>connection</param-name>
<param-value>jdbc:mysql://john.cedarville.edu/cs4220</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>cs4220</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value></param-value>
</context-param>
<servlet>
<!-- Arbitrary servlet name -->
<servlet-name>servlet2</servlet-name>
<!-- The name of the class you want to run -->
<servlet-class>com.HelloCedarville</servlet-class>
</servlet>
<servlet-mapping>
<!-- Must match the same as above -->
<servlet-name>servlet2</servlet-name>
<!-- maps the servlet to a specific URL in this case it
would be judah/<your login name>/servlet/RequestInfoExample -->
<url-pattern>/HelloCedarville</url-pattern>
</servlet-mapping>
<servlet>
<!-- Arbitrary servlet name -->
<servlet-name>servlet</servlet-name>
<!-- The name of the class you want to run -->
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<!-- Must match the same as above -->
<servlet-name>servlet</servlet-name>
<!-- maps the servlet to a specific URL in this case it
would be judah/<your login name>/servlet/RequestInfoExample -->
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
这里是HelloCedarville.java的java代码:
package com;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloCedarville extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional //EN\">\n";
out.println (docType + "<html>\n" + "<head><title>" +
"Hello Cedarville</title></head>\n" + "<body>\n" +
"<h1>Hello Cedarville</h1>\n" + "</body></html>\n");
}
}
【问题讨论】: