tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <craig...@apache.org>
Subject Re: Embedding Tomcat with intra-app Servlets
Date Fri, 02 Nov 2001 19:10:15 GMT
Here's the Tomcat 4 approach -- 3.x has similar things but I'm not as
familiar with the details.

You have two fundamental choices, based on whether you want to use
server.xml to configure Tomcat or not:

* To use server.xml, you just need to set up an environment
  like the "catalina.sh" script does, and call

    Bootstrap.main("start");

  in a separate thread.  When you ultimately want to shut things
  down, call:

    Bootstrap.main("stop");

* To configure all the components yourself, you will use the
  org.apache.catalina.startup.Embedded class (similar to
  EmbeddedTomcat in 3.x).  This class includes a dummy main()
  program that demonstrates how you do things.

For actually processing the requests yourself, you would only need a
single webapp (the ROOT webapp) with a web.xml that configures your
servlet to handle all requests (i.e. a <servlet-mapping> with a pattern of
"/*").  There's no need for interceptors (3.x) or valves (4.x) to do this.

I would recommend you implement the application logic as a standard
servlet, in its own class, and separate the startup/shutdown issues out to
their own class.  There is nothing to be gained by combining them.

Craig


On Fri, 2 Nov 2001, Todd Wright wrote:

> Date: Fri, 2 Nov 2001 12:25:23 -0400
> From: Todd Wright <twright@bbn.com>
> Reply-To: Tomcat Users List <tomcat-user@jakarta.apache.org>
> To: tomcat-user@jakarta.apache.org
> Subject: Embedding Tomcat with intra-app Servlets
>
>
> I'd like to embed Tomcat within my Java application, but where some Servlet
> requests would *directly* call into my running application's code (+data).
> The current "EmbededTomcat" support seems to be aimed at launching a
> stand-alone Tomcat that only supports file contexts, with no callback support
> for access to the launching application.
>
> I'm thinking of Tomcat 3.3, 'though 4.0 could be used if required.
>
> For example, suppose I have a calendar application that I'd like to add web
> support.  Inside my application I have all the data I need, and I'd like my
> servlets to directly access my the data structures.  Flattening the data out
> to an external database/filesystem is not an option.  All Servlet requests
> would funnel into my application so I can call my own (inner) Servlet.   I
> still want Tomcat to do the HTTP parsing, SSL, sessions, Servlet-API, etc.
> My application must load the internal Servlet instance.
>
> Can I use an interceptor, or (if needed) pull apart "EmbededTomcat"?  Is
> there an example of how to do this?  I hope it's clear why this would be a
> very useful embedding scenario...
>
> Pseudocode:
>
>     public class MyApp implements Runnable {
>
>        /** launcher */
>        public static void main(String[] args) {
>            // launch!
>           (new MyApp()).run();
>        }
>
>        public void run() {
>           // create my internal Servlet before Tomcat is launched
>           //
>           // this inner class is defined later in this method
>           Servlet myServlet = new MyServlet();
>
>           // launch Tomcat
>           EmbeddedTomcat et = new EmbeddedTomcat();
>           et.setArgs(new String[] {"start"});
>           et.execute();
>
>           //
>           // hand-waving here!   Could be moved to before the "et.execute()".
>           //
>           insert myServlet into Tomcat to handle all "/*" requests
>
>           //
>           //  I now want "myServlet" to be called with all "/*" requests
>           //
>
>           // run forever in this example...
>        }
>
>        /**
>         * sample internal data method.
>         *
>         * MyServlet will call this method
>         */
>        public String getInternalString() {
>           return "foo";
>        }
>
>        /**
>         * My inner servlet -- has access back into "MyApp"
>         *  instance (non-static).
>         */
>        private class MyServlet extends HttpServlet {
>           public void doGet(
>               HttpServletRequest request,
>               HttpServletResponse response)
>                    throws IOException, ServletException  {
>            response.setContentType("text/html");
>            PrintWriter out = response.getWriter();
>            out.println("<html><body>Internal String is ");
>
>            // access internal MyApp method/data!
>            out.println(getInternalString());
>
>            out.println("</body></html>");
>        }
>     }
>
> Thanks!
>    Todd
>
> --
> To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
> For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
> Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>
>
>


--
To unsubscribe:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands: <mailto:tomcat-user-help@jakarta.apache.org>
Troubles with the list: <mailto:tomcat-user-owner@jakarta.apache.org>


Mime
View raw message