error using JSP, Javabeans, and Tomcat

O

Olinga K. Abbott

I'm having difficult getting JSP to work with Javabeans inside Tomcat.
I've been working on this for awhile, and I have seen some examples,
but all the examples I found (like "sample" included with Tomcat)
explain JSP and servlets but not Javabeans. I have not been able to get
a complete picture of the proper configuration, even after reading the
Tomcat docs.

My JSP looks like this:
===================================================================
<%!
String pageName = "progsoftware.com";
%>

<html>
<head>
<title><%= pageName %></title>
<jsp:useBean class="dbConnect.dbConnect" id="bean0" scope="page" />
</head>
<body>
<h1>Welcome to <%= pageName %></h1>

</body>
</html>
===================================================================
Depending on what I place in the "class" attribute I get different
error messages:

1) "dbConnect.dbConnect":
=====================================================
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 8 in the jsp file: /learn.jsp
Generated servlet error:
dbConnect cannot be resolved to a type

An error occurred at line: 8 in the jsp file: /learn.jsp
Generated servlet error:
dbConnect cannot be resolved

An error occurred at line: 8 in the jsp file: /learn.jsp
Generated servlet error:
dbConnect cannot be resolved to a type


org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:409)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:288)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
=====================================================================
2) "dbConnect":
====================================================================
javax.servlet.ServletException: dbConnect (wrong name:
dbConnect/dbConnect)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:272)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError: dbConnect (wrong name:
dbConnect/dbConnect)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
java.net.URLClassLoader.defineClass(Unknown Source)
java.net.URLClassLoader.access$100(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1187)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1210)
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:3284)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:189)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
======================================================================
3) "asdf" (random string):
======================================================================
org.apache.jasper.JasperException: /learn.jsp(8,1) The value for the
useBean class attribute asdf is invalid.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:146)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1223)
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:3284)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:189)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
=======================================================================
Interestingly, sometimes when I do a reload in my browsers (Firefox and
IE) one of the previous error messages are returned. This appears at
random, and the error messages will interleave merely by refreshing. It
appears that Tomcat inappropriately caches.

My directory structure is
=======================================================================
Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware

01/12/2006 01:49 PM <DIR> .
01/12/2006 01:49 PM <DIR> ..
01/12/2006 11:43 AM 317 .classpath
01/12/2006 06:29 AM 388 .project
01/12/2006 01:42 PM <DIR> .settings
01/12/2006 02:11 PM 228 learn.jsp
01/12/2006 01:42 PM <DIR> source
01/12/2006 01:42 PM <DIR> WEB-INF
01/12/2006 10:51 AM 287 web.xml
4 File(s) 1,220 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\.settings

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 06:29 AM 330 org.eclipse.jdt.core.prefs
1 File(s) 330 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\source

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 01:42 PM <DIR> dbConnect
0 File(s) 0 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\source\dbConnect

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 12:45 PM 1,247 dbConnect.java
1 File(s) 1,247 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\WEB-INF

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 01:42 PM <DIR> classes
01/12/2006 01:42 PM <DIR> lib
0 File(s) 0 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\WEB-INF\classes

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 01:42 PM <DIR> dbConnect
0 File(s) 0 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\WEB-INF\classes\dbConnect

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
01/12/2006 12:45 PM 1,918 dbConnect.class
1 File(s) 1,918 bytes

Directory of C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware\WEB-INF\lib

01/12/2006 01:42 PM <DIR> .
01/12/2006 01:42 PM <DIR> ..
0 File(s) 0 bytes
===================================================================
Following are the contents of some relevant files
dbConnect.java (the class file is in the webapps\progsoftware folder,
and the java file is in a "workspace" folder outside the Tomcat
hierarchy.)
======================================================================
package dbConnect;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.lang.ClassNotFoundException;
public class dbConnect
{
private Connection con;
private ResultSet rs;
public dbConnect(){} //added after reading that beans require default
constructors
public void DBConnect(String dbName, String username, String password)
throws ClassNotFoundException,SQLException
{
Class.forName("org.postgresql.Driver");
con =
DriverManager.getConnection("jdbc:postgresql:postgres",username,password);
}
public void execStmt(String queryString)
throws SQLException
{
Statement stmt = con.createStatement();
rs = stmt.executeQuery(queryString);
}
public void closeConnection()
throws SQLException
{
con.close();
}
public dbConnect(String dbName, String username, String password,
String queryString)
throws ClassNotFoundException,SQLException
{
DBConnect(dbName,username,password);
execStmt(queryString);
closeConnection();
}
public dbConnect(String dbName, String username, String password)
throws ClassNotFoundException,SQLException
{
DBConnect(dbName,username,password);
}
public ResultSet getResultSet()
{
return rs;
}
}
===================================================================
web.xml (I'm under the impression that it only needs to be filled when
running servlets, which I'm not)
=======================================================================
<?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/j2ee/dtds/web-app_2_3.dtd">
<web-app>
</web-app>
=====================================================================
Because of its length, I'm not posting the complete contents of
conf\server.xml, but I only added one line which I read was required:
<Context path="C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware" docBase="progsoftware" debug="0"
reloadable="true" />
This is just before </host>. The source I was reading
(http://www.onjava.com/pub/a/onjava/2001/04/19/tomcat.html?page=2) said
to add the line but did not state where to place it.
I'm wondering though if this is only required when using servelets.

I don't think I have changed any other files.

Software versions:
Tomcat 5.5.12
Eclipse: 3.1.1
OS: WinXP sp 2
JDK: 1.5.0_06
 
R

rkm

You say you aren't using servlets, yet you got an error message saying:
Generated servlet error:

so you apparently _are_ using servlets, so you would need an entry in
web.xml that instructs the server to instantiate your dbConnect class on
demand (or at startup, as you prefer). My experience is with JSF, so I
do those things in the JSF.xml file. Your class="dbConnect.dbConnect"
value is the correct one.

Rick
 
A

Andrea Desole

Olinga said:
I'm having difficult getting JSP to work with Javabeans inside Tomcat.
I've been working on this for awhile, and I have seen some examples,
but all the examples I found (like "sample" included with Tomcat)
explain JSP and servlets but not Javabeans. I have not been able to get
a complete picture of the proper configuration, even after reading the
Tomcat docs.

My JSP looks like this:
===================================================================
<%!
String pageName = "progsoftware.com";
%>

<html>
<head>
<title><%= pageName %></title>
<jsp:useBean class="dbConnect.dbConnect" id="bean0" scope="page" />
</head>
<body>
<h1>Welcome to <%= pageName %></h1>

</body>
</html>

looks correct
===================================================================
web.xml (I'm under the impression that it only needs to be filled when
running servlets, which I'm not)

not really, but it doesn't matter
Because of its length, I'm not posting the complete contents of
conf\server.xml, but I only added one line which I read was required:
<Context path="C:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\progsoftware" docBase="progsoftware" debug="0"
reloadable="true" />

this is probably not correct. Also, if the application is in the webapps
directory it's not necessary. Read the Tomcat documentation for more
information
I'm not sure this is the cause of the problem, though
This is just before </host>. The source I was reading
(http://www.onjava.com/pub/a/onjava/2001/04/19/tomcat.html?page=2) said
to add the line but did not state where to place it.
I'm wondering though if this is only required when using servelets.

no. This has some specific information for Tomcat to handle your web
application; for example, the location of the application itself or if
classes should be loaded as soon as they are put into the web application

What you did looks fine. Try to reproduce the problem with a new,clean
application. Or try to reinstall Tomcat
 
O

Olinga K. Abbott

Rick, Andrea, thanks for responding. I reinstalled Tomcat and
everything works now.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,276
Latest member
Sawatmakal

Latest Threads

Top