Hi,
First off, let me apologise for the level of detail in
this message; if possible, I'd have made it shorter.
Anyway, I'm trying to learn J2EE; Tomcat seemed like a
good choice to learn the underlying technology, rather
than a particular JSP/Servlet container's deployment
tool. I can get 'plain' JSP pages working fine.
Unfortunately, I'm having major problems developing my
own Javabeans applications for Tomcat; they all fail
as shown below. The demos that come with Tomcat work
fine (although I can't get the demo at
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/appdev/sample
to work; However- that's another story)
I understand that I should simply be able to drop the
directory structure containing my program into
$CATALINA_HOME/webapps, restart Tomcat (I'm using
5.5.7) and have it work.
Its contents (root:root ownership, Tomcat running as
root) is:-
skeleton
skeleton/subapp
skeleton/subapp/skeleton.jsp
skeleton/WEB-INF
skeleton/WEB-INF/classes
skeleton/WEB-INF/lib
skeleton/WEB-INF/lib/subapp
skeleton/WEB-INF/lib/subapp/Beany.class
skeleton/WEB-INF/lib/subapp/Beany.java
skeleton/WEB-INF/lib/subapp.jar
skeleton/WEB-INF/web.xml
Contents of files listed at end of message.
Here's what happens when I try to run it:-
(1) When I try to access
http://localhost:8080/skeleton/subapp/skeleton.jsp
with the setup as above, I get
HTTP Status 404 - Servlet
org.apache.jsp.subapp.skeleton_jsp
is not available
message Servlet
org.apache.jsp.subapp.skeleton_jsp
is not available
(2) If I move skeleton/WEB-INF/lib/subapp to
skeleton/WEB-INF/classes/subapp,
I get
HTTP STATUS 500 - EXCEPTION REPORT
The server encountered an internal error ()
that prevented it from fulfilling this
request.
EXCEPTION
javax.servlet.ServletException: Wrapper
cannot find servlet class
org.apache.jsp.subapp.skeleton_jsp
or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:105)
[... SNIP ...]
java.lang.Thread.run(Thread.java:595)
ROOT CAUSE
java.lang.ClassNotFoundException:
org.apache.jsp.subapp.skeleton_jsp
org.apache.catalina.loader.WebappClassLoader.loadClass
(WebappClassLoader.java:1332)
[... SNIP ...]
java.lang.Thread.run(Thread.java:595)
(3) If I remove the deployment descriptor altogether,
I get:-
HTTP STATUS 500 - EXCEPTION REPORT
The server encountered an internal error ()
that prevented it from fulfilling this
request.
EXCEPTION
org.apache.jasper.JasperException:
/subapp/skeleton.jsp(2,0) The
value for the useBean class attribute
subclass.Beany is invalid.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
[... SNIP
...]
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
In short, it fails; in three noticeably different
ways, granted; but it still
fails. What on EARTH am I doing wrong or missing out?!
I'd really appreciate
some feedback on this. Thank you in advance.
Here are the files:-
** SKELETON.JSP:
html
jsp:useBean id=beanId class=subclass.Beany
scope=session /
headtitleFoo Bar/title/head
body
h1Foo Bar/h1
Duzzy wuzzy was a duck; ducky fuzzy duck a wuzz blah
blah some more yak.
/body
/html
---
** WEB.XML
?xml version=1.0 encoding=ISO-8859-1?
!-- Copyright 2004 The Apache [SNIP] --
web-app xmlns=http://java.sun.com/xml/ns/j2ee;
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;
xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd;
version=2.4
display-nameDisplay Name/display-name
description
Display Description
/description
!-- JSPC servlet mappings start --
servlet
servlet-nameorg.apache.jsp.subapp.skeleton_jsp/servlet-name
servlet-classorg.apache.jsp.subapp.skeleton_jsp/servlet-class
/servlet
servlet-mapping
servlet-nameorg.apache.jsp.subapp.skeleton_jsp/servlet-name
url-pattern/subapp/skeleton.jsp/url-pattern
/servlet-mapping
!-- JSPC servlet mappings end --
---
---
** BEANY.JAVA
package subapp;
public class Beany
{
private int first;
/** Public no-args constructor */
public Beany()
{
first = 404;
}
public int getFirst()
{
return first;
}
public void setFirst(int first)
{
this.first = first;
}
public String stringy = Original Value;