Greetings all,

I'm sure this is a newbie problem, but a search of the archives didn't reveal what I 
was looking for.

It's probably easiest if I first describe what I want to accomplish:

Mac OS X Server 10.3.3
Apache 1.3.29
Tomcat 4.1.24

(a) Deploy a webapp directory (or .war) that contains Java classes, some JSP pages, 
and a web.xml file.

(b) Have the JSP pages execute in the Context of the above web app.  Specifically, 
access the Java beans contained in the WEB-INF/classes directory and read 
configuration parameters defined in the WEB-INF/web.xml file.

I'm having problems with (b).  I've created, what I think is, a valid webapps 
directory complete with WEB-INF/web.xml file and Java classes.

I believe my problem stems from two confounding issues: (1) I'm trying to do this in a 
virtual host alongside Apache and (2) I'm a little fuzzy on the relationship between 
JSP pages, the JSP servlet, and web app Contexts.

[ Note: I've made a lot of progress since I picked up "Tomcat: The Definitive Guide", 
by Jason Brittain & Ian F. Darwin.  I was completely lost before I read their book.  
Now, I'm merely bewildered.  ;) ]

In my server.xml file, I've defined a virtual host (beyond the default one for 
'localhost'):

  <!-- Virtual host: www.hotelmidnight.net -->
  <!-- (jlb 11-April-2004) Added virtual host -->
  <Host name="www.hotelmidnight.net" debug="0" appBase="/Users/darkthirty/Sites"
        unpackWARs="false" autoDeploy="true">

    <!-- this site doesn't use any user authentication -->

    <Logger className="org.apache.catalina.logger.FileLogger"
             directory="logs"  prefix="darkthirty_log." suffix=".txt"
        timestamp="true"/>

    <!-- Context for the top-level web application -->
    <Context path="" docBase="." debug="99" reloadable="true"/>
    
    <!-- Let's find out if I can use the manager from a virtual host... -->
    <Context path="/manager" docBase="/Library/Tomcat/server/webapps/manager" 
debug="5" privileged="true">
        <ResourceLink name="users" global="UserDatabase" 
type="org.apache.catalina.UserDatabase"/>
    </Context>

  </Host>

Also note that I'm using the default mapping of *.jsp to Tomcat (mod_jk) in Apache, 
and *.jsp is mapped to the 'jsp' <servlet> in ${catalina_home}/config/web.xml.

The web application I want to deploy for this site is in /Users/darkthirty/Sites.  
I've created a TestBean class in ./WEB-INF/classes.  The ./WEB-INF/web.xml file 
contains the following:

    <web-app>
        <display-name>darkthirty</display-name>
        <description>darkthirty.net artwork application</description>
    
        <!-- Global parameters for this web application -->
        <context-param>
            <param-name>test</param-name>
            <param-value>Some Value</param-value>
        </context-param>
    </web-app>

I then wrote a short test.jsp page to check the installation:

    <%@ page language="java" import="java.util.*,net.darkthirty.web.art.jsp.*"%><html>
    <jsp:useBean id="testBean" class="net.darkthirty.web.art.jsp.TestBean" 
scope="application"/>
    <head>
        <title>JSP TEST PAGE</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <p>TestBean.getProperty(): <%= testBean.getProperty() %></p>
    <p>new Date(): <%= (new Date()).toString() %></p>
    <p>application.getServletContextName(): <%= application.getServletContextName() 
%></p>
    <p>application.getInitParameterNames(): <% Enumeration e = 
application.getInitParameterNames(); while (e.hasMoreElements()) { %>"<%= 
e.nextElement() %>", <% } %></p>
    <p>application.getAttributeNames(): <% e = application.getAttributeNames(); while 
(e.hasMoreElements()) { %>"<%= e.nextElement() %>", <% } %></p>
    <p>config.getInitParameterNames(): <% e = config.getInitParameterNames(); while 
(e.hasMoreElements()) { %>"<%= e.nextElement() %>", <% } %></p>
    <p>context-param "test": <%= application.getInitParameter("test") %></p>
    </body>
    </html>

The parts that works are thus:

- If I load the URL <http://www.hotelmidnight.net/test.jsp>, the file test.jsp at 
/Users/darkthirty/Sites/test.jsp gets compiled and executed by the JSP servlet.  
Here's the output:

    TestBean.getProperty(): Hello!
    new Date(): Sun Apr 11 21:23:46 MST 2004
    application.getServletContextName(): null
    application.getInitParameterNames():
    application.getAttributeNames(): "org.apache.catalina.jsp_classpath", 
"javax.servlet.context.tempdir", "org.apache.catalina.resources", "testBean", 
"org.apache.catalina.WELCOME_FILES",
    config.getInitParameterNames(): "fork", "logVerbosityLevel",
    context-param "test": null

- test.jsp successfully references and instantiates the TestBean object from the class 
contained in ./WEB-INF/classes.  So it seems that the class loader for this web app is 
working.

- If I load <http://www.hotelmidnight.net:9006/manager/html/> it shows that I'm 
running two web applications, "/" and "/manager".  Loading the test.jsp page causes 
the number of sessions in the "/" application to change.

But here's the part that doesn't work:

- The call to application.getInitParameter("test") doesn't return the value for the 
'test' context-param I defined in my web.xml file.

- The call to application.getServletContextName() returns null.

- The call to config.getInitParameterNames() returns the properties "fork", and 
"logVerbosityLevel".  (These are defined in {catalina_home}/conf/web.xml for the 'jsp' 
<servlet>.)

All this leads me to believe that my JSP pages are not running the Context of the web 
application that I created.  They appear to be running in the Context of the 'jsp' 
<servlet> defined in ${cataling_home}/conf/web.xml.

When I reload the "/" application in the manager, all of my application scope objects 
disappear.  So it would appear that the manager is reloading the 'jsp' servlet, not 
mine.

Also, the <display-name> of my web app never appears anywhere.

So, what am I missing?  How do I deploy a collection of Java classes and a web.xml in 
a virtual host's directory so that the JSP pages in that site run in the <Context> of 
that web application?  I'm eventually going to create other virtual hosts, and I want 
the JSP pages in each host to run in their own Context, with the ability to control 
and reload them individually.

I admit that I'm dubious about the web.xml I created for my "application" because it 
doesn't declare a <servlet>.  But my problem is that I don't really have a servlet -- 
just some JSP pages.  Do I need to create a dummy servlet to act as a container for my 
JSP pages?  Do I need to map *.jsp pages in the <web-app>?  How do I do this if I 
don't have a <servlet> to reference?

I think I'm a little confused as to the relationship between JSP pages, the 'jsp' 
servlet, and a web application.  Any reading material that might clarify the 
relationship between these would be greatly appreciated.

______________________________________________________
James Bucanek       <mailto:[EMAIL PROTECTED]>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to