tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Bucanek <subscri...@gloaming.com>
Subject Newbie problem with JSP contexts & virtual hosts
Date Mon, 12 Apr 2004 05:06:55 GMT
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:privatereply@gloaming.com>

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message