The multi-app functionality still uses a single servlet - the apps are
logically, but not physically, separate. Also, Struts figures out the
mappings, so you only register a single servlet mapping.
Here is something closer to what you want for the Struts configuration:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.tiles.ActionComponentServlet</servlet-class>
<init-param>
<param-name>config/subapp1</param-name>
<param-value>/docroot/subapp1/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/subapp2</param-name>
<param-value>/docroot/subapp2/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
This configuration will map a URL like this:
http://yourhost/yourapp/subapp1/youraction.do
to an action in subapp1's struts-config.xml file with a path of
"/youraction". The mapping to subapp1 is done automagically by the Struts
controller, and all the appropriate sub-app-specific resources, etc., are
made available for the processing of that request.
One very important note about the above configuration: The Struts multi-app
support is designed to accomodate a default sub-app, which works the same
way as a Struts app not using the multi-app support. In this case, the init
param would be just "config", and it would process requests of the form:
http://yourhost/yourapp/youraction.do
Also, any requests that cannot be matched to an explicit subapp will be
looked up in the default sub-app.
I have not personally tried writing an app with multiple sub-apps and no
default sub-app, but it should work. The above is just something you need
to be aware of.
By the way, I left out the Tiles configuration, since I'm not sufficiently
familiar with it, especially in a multi-app environment.
--
Martin Cooper
At 01:55 PM 4/11/02, Struts Newsgroup wrote:
>Subject: Configuring sub-applications
>From: Bill Wohler <[EMAIL PROTECTED]>
> ===
> Let's say I have the following goals:
>
> 1. I want the following URLs:
>
> http://host/app/subapp1/someaction
> http://host/app/subapp2/someaction
>
> 2. I want the subapps to have their own action namespace.
>
> 3. I want to break up the configurations (struts-config.xml and
> tile-defs.xml) for the subapps. This goal is up for negotiation if
> necessary.
>
> I thought my web.xml might look like this:
>
> <web-app>
> ...
> <servlet>
> <servlet-name>subapp1</servlet-name>
> <servlet-class>
> org.apache.struts.tiles.ActionComponentServlet
> </servlet-class>
>
> <init-param>
> <param-name>config</param-name>
> <param-value>/docroot/subapp1/struts-config.xml</param-value>
> </init-param>
> <init-param>
> <param-name>definitions-config</param-name>
> <param-value>/docroot/subapp1/tile-defs.xml</param-value>
> </init-param>
> ...
> <load-on-startup>2</load-on-startup>
> </servlet>
>
> <servlet>
> <servlet-name>subapp2</servlet-name>
> <servlet-class>
> org.apache.struts.tiles.ActionComponentServlet
> </servlet-class>
>
> <init-param>
> <param-name>config</param-name>
> <param-value>/docroot/subapp2/struts-config.xml</param-value>
> </init-param>
> <init-param>
> <param-name>definitions-config</param-name>
> <param-value>/docroot/subapp2/tile-defs.xml</param-value>
> </init-param>
> ...
> <load-on-startup>2</load-on-startup>
> </servlet>
>
> <servlet-mapping>
> <servlet-name>subapp1</servlet-name>
> <url-pattern>/subapp1/*</url-pattern>
> </servlet-mapping>
>
> <servlet-mapping>
> <servlet-name>subapp2</servlet-name>
> <url-pattern>/subapp2/*</url-pattern>
> </servlet-mapping>
> ...
> </web-app>
>
> First, is the correct way to achieve my goals? It might not be,
> because unfortunately, I'm getting this message for all URLs in
> subapp1:
>
> The request sent by the client was syntactically incorrect
> (Invalid path /someaction was requested).
>
> And for URLs in subapp2:
>
> The requested resource (/subapp2/someaction) is not available.
>
> However, if I add the following to /index.jsp and view that, I get
> a view of the page:
>
> <tiles:insert definition="subapp1.page1" />
>
> However, the following errors appear in the page:
>
> [ServletException in:/docroot/subapp1/someaction/content.jsp]
> Cannot retrieve mapping for action /someotheraction
>
> And if I put the following in index.jsp:
>
> <tiles:insert definition="subapp2.page1" />
>
> I get this:
>
> javax.servlet.ServletException: Error - Tag Insert : Can't get
> definition 'subapp2.page2 '. Check if this name exist in
> definitions factory.
>
> If I rip out the servlet and servlet-mapping stanzas for subapp2,
> then subapp1 works just fine.
>
> The Tomcat 4.0.2 log files offer no additional information.
>
> I'd appreciate any suggestions you might have. I searched but
> couldn't find any examples like this.
>
>--
>Bill Wohler <[EMAIL PROTECTED]> http://www.newt.com/wohler/ GnuPG ID:610BD9AD
>Maintainer of comp.mail.mh FAQ and mh-e. Vote Libertarian!
>If you're passed on the right, you're in the wrong lane.
>
>--
>To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>