Unable to compile class
[nobr]I'm in the process of teaching myself how to use JSPs and JavaBeans, and I'm running into a problem that I can't figure out. I'm following a tutorial in which I use a simple bean (UserData) to collect and retrieve simple user data.
However, I continue to get this error from the Tomcat Server:
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 9 in the jsp file: /saveName.jsp
Generated servlet error:
C:\jakarta-tomcat-5.0.28\work\Catalina\localhost\_\org\apache\jsp\saveName_jsp.java:51: cannot access myPackage.UserData
An error occurred at line: 9 in the jsp file: /saveName.jsp
Generated servlet error:
bad class file: C:\jakarta-tomcat-5.0.28\webapps\Root\WEB-INF\classes\myPackage\UserData.class
class file contains wrong class: UserData
Please remove or make sure it appears in the correct subdirectory of the classpath.
UserData user = null;
^
1 error
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
And here is the code for the 4 files involved:
1. getName.html
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Getting Your Name</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form method="post" action="saveName.jsp">
What's your name?
<input type="text" name="username" size="20">
<br />
What's your e-mail address?
<input type="text" name="email" size="20">
<br />
What's your age?
<input type="text" name="age" size="4">
<br /><br />
<input type="submit">
</form>
</body>
</html>
2. saveName.jsp
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="myPackage.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<jsp:useBean id="user" type="UserData" scope="session" />
<jsp:setProperty name="user" property="*" />
<body>
<a href="nextPage.jsp">Continue</a>
</body>
</html>
3. nextPage.jsp
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="myPackage.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<jsp:useBean id="user" type="UserData" scope="session" />
<body>
Hello, <%= user.getUsername() %>! (e-mail: <%= user.getEmail() %>)<br />
You are <%= user.getAge() %> years old.<br />
Your age rating is
<%
int age = user.getAge();
if (age < 0) out.println("impossible!");
elseif (age < 30) out.println("young.");
elseif (age < 50) out.println("old.");
else out.println("ancient!");
%>
</body>
</html>
4. UserData.java
// Java Document
package myPackage;
publicclass UserData{
String username;
String email;
int age;
publicvoid setUsername(String value){
username = value;
}
publicvoid setEmail(String value){
email = value;
}
publicvoid setAge(int value){
age = value;
}
public String getUsername(){
return username;
}
public String getEmail(){
return email;
}
publicint getAge(){
return age;
}
}
The JSP and HTML files are in the Root directory; the class file for UserData is in Root\WEB-INF\classes\myPackage
And here is the environment information: the server is running Windows 98, Jakarta Tomcat ver. 5.0.28, and Java 2 Standard Edition ver. 1.4.2_06. The files have been written in Macromedia Dreamweaver MX 2004
Any suggestions?[/nobr]
OK, that didn't work. It should know where to find UserData because I put myPackage in the import statement at the top. Here's what I got when I put in type="myPackage.UserData"
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 9 in the jsp file: /learning/saveName.jsp
Generated servlet error:
C:\jakarta-tomcat-5.0.28\work\Catalina\localhost\_\org\apache\jsp\learning\saveName_jsp.java:51: cannot access myPackage.UserData
An error occurred at line: 9 in the jsp file: /learning/saveName.jsp
Generated servlet error:
bad class file: C:\jakarta-tomcat-5.0.28\webapps\Root\WEB-INF\classes\myPackage\UserData.class
class file contains wrong class: UserData
Please remove or make sure it appears in the correct subdirectory of the classpath.
myPackage.UserData user = null;
^
1 error
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
And here's what I get when I use class="myPackage.UserData"
(I also get this when I try using both type="UserData"
and class="myPackage.UserData"
):
javax.servlet.ServletException: myPackage/UserData (wrong name: UserData)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:244)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NoClassDefFoundError: myPackage/UserData (wrong name: UserData)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1214)
org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Generator.generate(Generator.java:3272)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
AND... here's what I get when I try using just class="UserData'
org.apache.jasper.JasperException: /learning/saveName.jsp(9,0) The value for the useBean class attribute UserData is invalid.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1227)
org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Generator.generate(Generator.java:3272)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)