jQuery in Action, 2nd edition*
The moose likes JSP and the fly likes Unable to compile class for JSP Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » JSP
Bookmark "Unable to compile class for JSP" Watch "Unable to compile class for JSP" New topic
Author

Unable to compile class for JSP

Anuragk kushwaha
Ranch Hand

Joined: Aug 02, 2006
Posts: 51
please help me.

HTTP Status 500 -


--------------------------------------------------------------------------------

type Exception report

message

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

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:44: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
UserData user = null;
^


An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:46: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
user = (UserData) _jspx_page_context.getAttribute("user", PageContext.SESSION_SCOPE);
^


An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:48: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
user = new UserData();
^
3 errors



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:437)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:497)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)
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)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.30
Arafat Nalkhande
Ranch Hand

Joined: Jul 20, 2006
Posts: 51
It seems that the class UserData is not accessible within your jsp making it uncompilable.
Probable reason is that its not imported in the jsp file.
Try importing UserData class and check


I want to be myself, but a better myself.<br />~ SCJP 1.4 (91%), SCWCD 1.4 (86%) ~
Anuragk kushwaha
Ranch Hand

Joined: Aug 02, 2006
Posts: 51
hi arafat;
thanks for reply;

please suggest me where i am wrong, i think javabean is not instantiated in jsp file.may be it is related to the classpath of javabean. i have not set any variable for javabean classpath. and i put javabean class file in

TOMCAT_HOME/webapps/test3/WEB-INF/UseDta.class

and all the jsp and html in /test3. my jsp an javabeans are--

1. GetName.html

<HTML>
<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>
<P><INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

2. SaveName.jsp


<jsp:useBean id="user" class="UserData" scope="session">
<jsp:setProperty name="user" property="*"/>
</jsp:useBean>
<HTML>
<BODY>
<A HREF="NextPage.jsp">Continue</A>
</BODY>
</HTML>

3. UserData.java


public class UserData {
String username;
String email;
int age;

public UserData(){}

public void setUsername( String value )
{
username = value;
}

public void setEmail( String value )
{
email = value;
}

public void setAge( int value )
{
age = value;
}

public String getUsername() { return username; }

public String getEmail() { return email; }

public int getAge() { return age; }
}

4. NextPage.jsp



<jsp:useBean id="user" class="UserData" scope="session"/>
<HTML>
<BODY>
You entered<BR>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
Age: <%= user.getAge() %><BR>
</BODY>
</HTML>

url: http://localhost:8080/test3/GetName.html

is it related to context path??



HTTP Status 500 -


--------------------------------------------------------------------------------

type Exception report

message

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

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:44: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
UserData user = null;
^


An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:46: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
user = (UserData) _jspx_page_context.getAttribute("user", PageContext.SESSION_SCOPE);
^


An error occurred at line: 2 in the jsp file: /SaveName.jsp
Generated servlet error:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test3\org\apache\jsp\SaveName_jsp.java:48: cannot find symbol
symbol : class UserData
location: class org.apache.jsp.SaveName_jsp
user = new UserData();
^
3 errors



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:437)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:497)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)
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)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.30


please Reply me ASAP
i'll be glad if you reply. please
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14687
    
  16

1. You should put your class in a package (for example "user") and recompile
2. Put the package and its class files into WEB-INF/classes
3. Correct the JSP files to use "user.UserData"
4. Restart


[My Blog]
All roads lead to JavaRanch
Anuragk kushwaha
Ranch Hand

Joined: Aug 02, 2006
Posts: 51
hi Friend;

Thanks for reply.

After applying your suggetions....

now the error is...

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

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

exception

org.apache.jasper.JasperException: /SaveName.jsp(2,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:495)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)
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)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.30

please let me know where is the problem.

i will be thankful for you..
Ben Souther
Sheriff

Joined: Dec 11, 2004
Posts: 13410

Originally posted by anuragk kushwaha:

After applying your suggetions....


So... What does your useBean tag look like now?


Java API J2EE API Servlet Spec JSP Spec How to ask a question... Simple Servlet Examples jsonf
Anuragk kushwaha
Ranch Hand

Joined: Aug 02, 2006
Posts: 51
thanks for your valuable suggetions;

now its working.

the problem was in <jsp:useBean>

when i use class attribute as class="beans.UserData" (beans--package name)
it starts working..


the problem was(as i concluded)--bean must be inside a package, it does not inside default package.

if i am wrong then please correct me..

thanks once again to all forum members.
---
Anurag
Ben Souther
Sheriff

Joined: Dec 11, 2004
Posts: 13410

You are correct.
geeta lalchandani
Ranch Hand

Joined: Jun 07, 2005
Posts: 118
Ben,

Why is that so? The class should be picked up even if thats the default package.. right??
Is there any specific reason for this behaviour.
Ben Souther
Sheriff

Joined: Dec 11, 2004
Posts: 13410

The Java specs have never allowed classes in the default package (no stated package) to be imported by classes in a stated package.
Prior to 1.4.1 Sun's compiler allowed this anyway.

Starting with 1.4.1x Sun has tightened up the implementation of the compiler and stopped allowing it.

This has lead to some confusion for Servlet/JSP developers.
It's always been a good idea to package all of your classes in anything but the most trivial apps and it's much easier to tell someone to package all of their servlet and bean classes (ALL THE TIME) than to explain this, so that's what most the seasoned developers on this list tell people to do before making any other debugging suggestions.

Occasionally, someone will come back and tell us that we are wrong because they created an unpackaged servlet and it ran fine.

In this case it worked for them because their servlet was never imported by another class. It was loaded by the container's custom class loader.
JSPs, on the other hand, get compiled into servlet classes and the beans used by the JSP (either with the import directive or with the useBean tag) are actually listed as import statements in the generated servlet source code.
So, servlets, listeners, and filters will be found by your container; whether or not they're explicitly packaged. Beans will not.

Personally, I think this is too confusing to remember; especially when trying to debug something that's not working. To simplify my life, I eliminate any chance of this issue becoming a problem by packaging all of my java classes, always, right up front.

I can also tell you that many of the folks on this site (myself included) will quickly loose patience with someone who isn't willing to package all of their classes before trying to debug an issue (any issue), even if packaging doesn't seem to be related to their current problem.
[ August 03, 2006: Message edited by: Ben Souther ]
Bear Bibeault
Author and ninkuma
Marshal

Joined: Jan 10, 2002
Posts: 60057
    
  65

Based upon Ben's most excellent post, I have added a FAQ entry to the JSP FAQ for this issue.


[Asking smart questions] [Bear's FrontMan] [About Bear] [Books by Bear]
Stefan Evans
Bartender

Joined: Jul 06, 2005
Posts: 1016
For those interested, the bug report, and comments on its fix can be found here
Bear Bibeault
Author and ninkuma
Marshal

Joined: Jan 10, 2002
Posts: 60057
    
  65

Thanks Stefan. I have added the link to the FAQ entry.
Ben Souther
Sheriff

Joined: Dec 11, 2004
Posts: 13410

Yes, thank you very much.
This used to be in the compatibility notes on Sun's site.

I had numerous links to that page in here and in the Servlets forum.
Sun, for no apparent reason got rid of that page and didn't put up a replacement.

This is perfect.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Unable to compile class for JSP
 
Similar Threads
JSP error using tomcat
folder for my classes
Multiple forms in a single JSP page
How to call a class in yr jsp page
Beans and Form processing