我会尽量做到具体并提供尽可能多的信息。
我在 C:\myproject\tomcat 的计算机上安装了 tomcat 7
我在 C:\Program Files\java\jdk1.7.0_04 安装了 JDK 1.7.0_04
JRE_HOME = C:\Program Files\Java\jdk1.7.0_04
类路径 = C:\myproject\tomcat\bin\bootstrap.jar;C:\myproject\tomcat\bin\tomcat-juli.jar
在 jdk1.7.0_04\jre\lib\ext 文件夹中,我有文件 servlet-api.jar,我认为运行任何 servlet 都需要该文件。
在我的 C:\myproject\tomcat\conf\web.xml 文件中,我有标签
小服务程序标签
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>loginpackage.LoginServlet</servlet-class>
</servlet>
servlet 映射标记
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
我相信这是需要的,因此可以找到 localhost:9999/javawork/LoginServlet。
我有一个名为 javawork 的网络应用程序,位于 C:\myproject\tomcat\webapps\javawork
在那里我有一个文件夹 test_login,其中包含我的 JSP 文件,包括 LoginPage.jsp:
<%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>Login Page</title>
</head>
<body>
<form action="../LoginServlet">
Please enter your username
<input type="text" name="un"/><br>
Please enter your password
<input type="password" name="pw"/>
<input type="submit" value="submit">
</form>
</body>
</html>
在 javawork 中,我有一个带有 lib 和 classes 文件夹的 WEB-INF 文件夹,我的 oracle 驱动程序在 lib 文件夹中有几个 jar 文件。在类文件夹中,我有一个 loginpackage 文件夹,其中有我的 LoginServlet.java 文件和 LoginServlet.class 文件。我使用 Eclipse IDE 编译它,它将 .class 文件放入文件夹 javawork/bin/WEB-INF/classes/loginpackage 文件夹中,并将 .class 文件移动到主 WEB-INF 文件夹结构中以位于同一目录中作为 .java 文件。
登录Servlet.java:
package loginpackage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
UserBean user = new UserBean();
user.setUserName(request.getParameter("un"));
user.setPassword(request.getParameter("pw"));
user = UserDAO.login(user);
if (user.isValid())
{
HttpSession session = request.getSession(true);
session.setMaxInactiveInterval(60);
session.setAttribute("currentSessionUser",user);
session.setAttribute("sessUserName", user.getUsername());
session.setAttribute("userID",user.getUserID());
response.sendRedirect("userlogged.jsp"); //logged-in page
}
else
response.sendRedirect("invalidlogin.jsp"); //error page
}
catch (Throwable theException)
{
System.out.println(theException);
}
}//end doGet
}//End LoginServlet Class
我打开命令提示符并转到 C:\myproject\tomcat\bin 并运行启动文件,以便 tomcat 服务器正在运行。
我去http://localhost:9999/javawork/test_login/LoginPage.jsp
,加载很好。我在框中输入用户名和密码,然后单击提交按钮。它尝试转到http://localhost:9999/javawork/LoginServlet?un=u&pw=p
(u 和 p 是我输入的内容),我收到以下错误:异常
java.lang.NoClassDefFoundError: loginpackage/LoginServlet (wrong name: WEB-INF/classes/loginpackage/LoginServlet)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:791)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:461)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:309)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1812)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
我认为一切都正确排列,所以我不确定为什么会出现此错误。拜托,任何帮助将不胜感激,因为我已经坚持了一天多,并且需要让它继续工作以继续我工作的下一部分。谢谢。