Thank you Andre! Your solution was very helpful!

On Wed, Aug 26, 2015 at 10:26 AM, André Warnier <a...@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-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


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

Reply via email to