You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Srikanth Challa <sr...@enterpriseatlas.com> on 2015/08/26 06:06:08 UTC

Tomcat 7 - Organizing web applications into sub directories

I am trying to organize my applications (multiple) into a specific
hierarchy under the webapps folder.
Something like this -
webapps
     dev
          app1
          app2
     test
          app1
          app3

When deploying (without WAR), I am getting a 404 error for servlets. Tried
changing the web.xml servlet mapping, still no luck. It works perfectly
when the folder is moved directly under webapps like below -
webapps
     app1

Does tomcat have a limitation on organizing webapps under multiple levels
of folders (under the webapp directory)?

-- 
*-----------------------------*
Srikanth Challa
Founder, CEO
Enterprise Atlas Inc.
srikanth@enterpriseatlas.com
+1 (510) 402-6212

Re: Tomcat 7 - Organizing web applications into sub directories

Posted by Srikanth Challa <sr...@enterpriseatlas.com>.
Thank you Andre! Your solution was very helpful!

On Wed, Aug 26, 2015 at 10:26 AM, André Warnier <aw...@ice-sa.com> wrote:

> On 26.08.2015 06:06, Srikanth Challa wrote:
>
>> I am trying to organize my applications (multiple) into a specific
>> hierarchy under the webapps folder.
>> Something like this -
>> webapps
>>       dev
>>            app1
>>            app2
>>       test
>>            app1
>>            app3
>>
>> When deploying (without WAR), I am getting a 404 error for servlets. Tried
>> changing the web.xml servlet mapping, still no luck. It works perfectly
>> when the folder is moved directly under webapps like below -
>> webapps
>>       app1
>>
>> Does tomcat have a limitation on organizing webapps under multiple levels
>> of folders (under the webapp directory)?
>>
>>
> Hi.
> Without getting too technical :
> It is not a limitation of Tomcat.  There /are/ ways of doing what you
> indicate above.  But the problem is that if you do that, you are going
> against the "natural" way in which URLs are mapped to web-applications, and
> that will force you further down the line, to do ever more complicated
> things to keep this working correctly (for example, if you want to easily
> move an application between the "dev" and the "test" areas above).
>
> To map URLs to web-applications, Tomcat is following the basic principles
> outlined in the Servlet Specification 3.0, for example this :
>
> -- quote --
> 10.5 Directory Structure
> A Web application exists as a structured hierarchy of directories. The
> root of this
> hierarchy serves as the document root for files that are part of the
> application. For
> example, for a Web application with the context path /catalog in a Web
> container,
> the index.html file at the base of the Web application hierarchy or in a
> JAR file
> inside WEB-INF/lib that includes the index.html under META-INF/resources
> directory can be served to satisfy a request from /catalog/index.html.
> -- unquote --
>
> (re: http://tomcat.apache.org/tomcat-8.0-doc/appdev/deployment.html)
>
> For Tomcat, the "root" for all the applications within a specified <Host>,
> is the directory which is indicated by the "appBase" attribute of the
> corresponding <Host> tag.
> Like this :
>       <Host name="localhost"  appBase="(/somepath/)webapps"
>             unpackWARs="true" autoDeploy="true">
>
> and then under "(/somepath/)webapps/" you would have something like this :
>
> (/somepath/)webapps/
>        app1
>          app1-sub1
>          app1-sub2
>        app2
>          app2-sub1
>          app2-sub2
> etc..
>
> This makes it clear to Tomcat that "app1" and "app2" are the distinct
> web-applications (also known as "context"), corresponding respectively to
> URLs such as :
>   http://yourhost:port/app1
>   http://yourhost:port/app2
> and that the subdirectories "app1-sub1", "app1-sub2" etc.. are internal
> sub-divisions of these "app1" and "app2" web-applications, helping to map
> longer URLs to "things" inside these application (such as servlets, JSP
> pages, HTML pages etc.) (these further sub-mappings being described in the
> web.xml file of each web-application).
>
> If you want to go against this "natural" interpretation of the directory
> structure by Tomcat, then you have to start telling Tomcat (in various
> places), that "app1/app1-sub1" is one application, and "app1/app1-sub2" is
> a different application etc.., which complicates things for you (for
> example, you'd have to name a WAR file like "app1#app1-sub1.war"). (And
> also, since it is not the "natural way", it will confuse orther people).
>
> A more practical way of achieving what you want, would probably be to
> define 2 distinct <Host>'s, like this (in server.xml) :
>
>  <Host name="mydevhost" appBase="(/somepath/)webapps-dev"
> unpackWARs="true" autoDeploy="true">
> ...
> </Host>
>
>  <Host name="mytesthost" appBase="(/somepath/)webapps-test"
> unpackWARs="true" autoDeploy="true">
> ...
> </Host>
>
> (and of course, both "mydevhost" and "mytesthost" map to the same IP
> address (in DNS)).
>
> and then have a directory structure like this :
>
> webapps-dev/
>    app1
>    app2
>
> webapps-test/
>    app1
>    app2
>    app3
>
> corresponding to URLs like :
>  http://mydevhost:port/app1  (maps to /somepath/webapps-dev/app1)
>  http://mytesthost:port/app1 (maps to /somepath/webapps-test/app1)
>  etc..
>
> This way, the internal configuration and content of "app1" can be exactly
> the same for "dev" and "test", and you can move an application between the
> 2 Hosts (or anywhwere else, such as to another machine) without having to
> make any change at all inside the application or its configuration.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>


-- 
*-----------------------------*
Srikanth Challa
Founder, CEO
Enterprise Atlas Inc.
srikanth@enterpriseatlas.com
+1 (510) 402-6212

Re: Tomcat 7 - Organizing web applications into sub directories

Posted by André Warnier <aw...@ice-sa.com>.
On 26.08.2015 06:06, Srikanth Challa wrote:
> I am trying to organize my applications (multiple) into a specific
> hierarchy under the webapps folder.
> Something like this -
> webapps
>       dev
>            app1
>            app2
>       test
>            app1
>            app3
>
> When deploying (without WAR), I am getting a 404 error for servlets. Tried
> changing the web.xml servlet mapping, still no luck. It works perfectly
> when the folder is moved directly under webapps like below -
> webapps
>       app1
>
> Does tomcat have a limitation on organizing webapps under multiple levels
> of folders (under the webapp directory)?
>

Hi.
Without getting too technical :
It is not a limitation of Tomcat.  There /are/ ways of doing what you indicate above.  But 
the problem is that if you do that, you are going against the "natural" way in which URLs 
are mapped to web-applications, and that will force you further down the line, to do ever 
more complicated things to keep this working correctly (for example, if you want to easily 
move an application between the "dev" and the "test" areas above).

To map URLs to web-applications, Tomcat is following the basic principles outlined in the 
Servlet Specification 3.0, for example this :

-- quote --
10.5 Directory Structure
A Web application exists as a structured hierarchy of directories. The root of this
hierarchy serves as the document root for files that are part of the application. For
example, for a Web application with the context path /catalog in a Web container,
the index.html file at the base of the Web application hierarchy or in a JAR file
inside WEB-INF/lib that includes the index.html under META-INF/resources
directory can be served to satisfy a request from /catalog/index.html.
-- unquote --

(re: http://tomcat.apache.org/tomcat-8.0-doc/appdev/deployment.html)

For Tomcat, the "root" for all the applications within a specified <Host>, is the 
directory which is indicated by the "appBase" attribute of the corresponding <Host> tag.
Like this :
       <Host name="localhost"  appBase="(/somepath/)webapps"
             unpackWARs="true" autoDeploy="true">

and then under "(/somepath/)webapps/" you would have something like this :

(/somepath/)webapps/
        app1
          app1-sub1
          app1-sub2
        app2
          app2-sub1
          app2-sub2
etc..

This makes it clear to Tomcat that "app1" and "app2" are the distinct web-applications 
(also known as "context"), corresponding respectively to URLs such as :
   http://yourhost:port/app1
   http://yourhost:port/app2
and that the subdirectories "app1-sub1", "app1-sub2" etc.. are internal sub-divisions of 
these "app1" and "app2" web-applications, helping to map longer URLs to "things" inside 
these application (such as servlets, JSP pages, HTML pages etc.) (these further 
sub-mappings being described in the web.xml file of each web-application).

If you want to go against this "natural" interpretation of the directory structure by 
Tomcat, then you have to start telling Tomcat (in various places), that "app1/app1-sub1" 
is one application, and "app1/app1-sub2" is a different application etc.., which 
complicates things for you (for example, you'd have to name a WAR file like 
"app1#app1-sub1.war"). (And also, since it is not the "natural way", it will confuse 
orther people).

A more practical way of achieving what you want, would probably be to define 2 distinct 
<Host>'s, like this (in server.xml) :

  <Host name="mydevhost" appBase="(/somepath/)webapps-dev"
unpackWARs="true" autoDeploy="true">
...
</Host>

  <Host name="mytesthost" appBase="(/somepath/)webapps-test"
unpackWARs="true" autoDeploy="true">
...
</Host>

(and of course, both "mydevhost" and "mytesthost" map to the same IP address (in DNS)).

and then have a directory structure like this :

webapps-dev/
    app1
    app2

webapps-test/
    app1
    app2
    app3

corresponding to URLs like :
  http://mydevhost:port/app1  (maps to /somepath/webapps-dev/app1)
  http://mytesthost:port/app1 (maps to /somepath/webapps-test/app1)
  etc..

This way, the internal configuration and content of "app1" can be exactly the same for 
"dev" and "test", and you can move an application between the 2 Hosts (or anywhwere else, 
such as to another machine) without having to make any change at all inside the 
application or its configuration.



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


Re: Tomcat 7 - Organizing web applications into sub directories

Posted by Mark Thomas <ma...@apache.org>.
On 26 August 2015 05:06:08 BST, Srikanth Challa <sr...@enterpriseatlas.com> wrote:
>I am trying to organize my applications (multiple) into a specific
>hierarchy under the webapps folder.
>Something like this -
>webapps
>     dev
>          app1
>          app2
>     test
>          app1
>          app3
>
>When deploying (without WAR), I am getting a 404 error for servlets.
>Tried
>changing the web.xml servlet mapping, still no luck. It works perfectly
>when the folder is moved directly under webapps like below -
>webapps
>     app1
>
>Does tomcat have a limitation on organizing webapps under multiple
>levels
>of folders (under the webapp directory)?

Yes. Both WARs and directories must be placed directly in the appBase. You can use any organisation you like if you store them outside the appBase.

Mark



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