File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Tomcat and the fly likes How Tomcat Works book - development question Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Products » Tomcat
Bookmark "How Tomcat Works book - development question" Watch "How Tomcat Works book - development question" New topic
Author

How Tomcat Works book - development question

Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
hi, is anyone know whether tomcat is writen by java ?
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
is it possible we can code for tomcat action ...example, coding for tomcat server restart ..or shutdown tomcat server
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Alvin chew:
hi, is anyone know whether tomcat is writen by java ?


Yes, tomcat is written in Pure Java... The following paragraph from this link can confirm that...

Webservers like Tomcat, Jetty, Resin and Orion are written in Java unlike IIS which is written in something other than a .NET language. The benefit is that customizations and extensions are easier in a web container that built using the same language or virtual machine as the application. Furthermore, managed environments support better reliability and security.


Co-author of SCMAD Exam Guide, Author of JMADPlus
SCJP1.2, CCNA, SCWCD1.4, SCBCD1.3, SCMAD1.0, SCJA1.0, SCJP6.0
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Alvin chew:
is it possible we can code for tomcat action ...example, coding for tomcat server restart ..or shutdown tomcat server


I'm not quite clear with your question...

Do u mean that you wanna write an application that starts or stops Tomcat? If so, yes, you can do write an application which simply calls the starting, shudowning or restarting command from the Tomcat's bin directory...
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
yes, ko ko , that is what exactly i means, do you have any sample for it..say restart tomcat command call by java coding ..thank you !
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
is it possible we can code for tomcat action ...example, coding for tomcat server restart ..or shutdown tomcat server



Yes, you can do that.

Example :
Manage tomcat from ant script





SCJA,SCJP,SCWCD,SCBCD,SCEA I
Java Developer, Thailand
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
thank you, Somkiat Puisungnoen ...i'm do not understand ant ..do you have java coding sample ?
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Alvin chew:
yes, ko ko , that is what exactly i means, do you have any sample for it..say restart tomcat command call by java coding ..thank you !


Of course, you can even use Runtime class to call the native command from a Java application... The following sample method might help you...
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
thank you , ko ko
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
How to start/stop Tomcat ?


Answer


Tomcat 5 Startup Sequence

Sequence 1. Start from Command Line
Class: org.apache.catalina.startup.Bootstrap
What it does:
a) Set up classloaders
commonLoader (common)-> System Loader
sharedLoader (shared)-> commonLoader -> System Loader
catalinaLoader(server) -> commonLoader -> System Loader
b) Load startup class (reflection)
org.apache.catalina.startup.Catalina
setParentClassloader -> sharedLoader
Thread.contextClassloader -> catalinaLoader
c) Bootstrap.daemon.init() complete

Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
b1) initDirs() -> set properties like
catalina.home
catalina.base == catalina.home (most cases)
b2) initNaming
setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
org.apache.naming.java.javaURLContextFactory ->default)
b3) createStartDigester()
Configures a digester for the main server.xml elements like
org.apache.catalina.core.StandardServer (can change of course
org.apache.catalina.deploy.NamingResources
Stores naming resources in the J2EE JNDI tree
org.apache.catalina.LifecycleListener
implements events for start/stop of major components
org.apache.catalina.core.StandardService
The single entry for a set of connectors,
so that a container can listen to multiple connectors
ie, single entry
org.apache.coyote.tomcat5.CoyoteConnector
Connectors to listen for incoming requests only
It also adds the following rulesets to the digester
NamingRuleSet
EngineRuleSet
HostRuleSet
ContextRuleSet
b4) Load the server.xml and parse it using the digester
Parsing the server.xml using the digester is an automatic
XML-object mapping tool, that will create the objects defined in server.xml
Startup of the actual container has not started yet.
b5) Assigns System.out and System.err to the SystemLogHandler class
b6) Calls intialize on all components, this makes each object register itself with the
JMX agent.
During the process call the Connectors also initialize the adapters.
The adapters are the components that do the request pre-processing.
Typical adapters are HTTP1.1 (default if no protocol is specified,
org.apache.coyote.http11.Http11Protocol)
AJP1.3 for mod_jk etc.

c) Catalina.start()
c1) Starts the NamingContext and binds all JNDI references into it
c2) Starts the services under <Server> which are:
StandardService -> starts Engine (ContainerBase ->Logger,Loader,Realm,Cluster etc)
c3) StandardHost (started by the service)
Configures a ErrorReportValvem to do proper HTML output for different HTTP
errors codes
Starts the Valves in the pipeline (at least the ErrorReportValve)
Configures the StandardHostValve,
this valves ties the Webapp Class loader to the thread context
it also finds the session for the request
and invokes the context pipeline
Starts the HostConfig component
This component deploys all the webapps
(webapps & conf/Catalina/localhost/*.xml)
Webapps are installed using the deployer (StandardHostDeployer)
The deployer will create a Digester for your context, this digester
will then invoke ContextConfig.start()
The ContextConfig.start() will process the default web.xml (conf/web.xml)
and then process the applications web.xml (WEB-INF/web.xml)

c4) During the lifetime of the container (StandardEngine) there is a background thread that
keeps checking if the context has changed. If a context changes (timestamp of war file,
context xml file, web.xml) then a reload is issued (stop/remove/deploy/start)

d) Tomcat receives a request on an HTTP port
d1) The request is received by a separate thread which is waiting in the PoolTcpEndPoint
class. It is waiting for a request in a regular ServerSocket.accept() method.
When a request is received, this thread wakes up.
d2) The PoolTcpEndPoint assigns the a TcpConnection to handle the request.
It also supplies a JMX object name to the catalina container (not used I believe)
d3) The processor to handle the request in this case is Coyote Http11Processor,
and the process method is invoked.
This same processor is also continuing to check the input stream of the socket
until the keep alive point is reached or the connection is disconnected.
d4) The HTTP request is parsed using an internal buffer class (Coyote Http11 Internal Buffer)
The buffer class parses the request line, the headers, etc and store the result in a
Coyote request (not an HTTP request) This request contains all the HTTP info, such
as servername, port, scheme, etc.
d5) The processor contains a reference to an Adapter, in this case it is the
Coyote Tomcat 5 Adapter. Once the request has been parsed, the Http11 processor
invokes service() on the adapter. In the service method, the Request contains a
CoyoteRequest and CoyoteRespons (null for the first time)
The CoyoteRequest(Response) implements HttpRequest(Response) and HttpServletRequest(Response)
The adapter parses and associates everything with the request, cookies, the context through a
Mapper, etc
d6) When the parsing is finished, the CoyoteAdapter invokes its container (StandardEngine)
and invokes the invoke(request,response) method.
This initiates the HTTP request into the Catalina container starting at the engine level
d7) The StandardEngine.invoke() simply invokes the container pipeline.invoke()
d8) By default the engine only has one valve the StandardEngineValve, this valve simply
invokes the invoke() method on the Host pipeline (StandardHost.getPipeLine())
d9) the StandardHost has two valves by default, the StandardHostValve and the ErrorReportValve
d10) The standard host valve associates the correct class loader with the current thread
It also retrives the Manager and the session associated with the request (if there is one)
If there is a session access() is called to keep the session alive
d11) After that the StandardHostValve invokes the pipeline on the context associated
with the request.
d12) The first valve that gets invoked by the Context pipeline is the FormAuthenticator
valve. Then the StandardContextValve gets invoke.
The StandardContextValve invokes any context listeners associated with the context.
Next it invokes the pipeline on the Wrapper component (StandardWrapperValve)
d13) During the invokation of the StandardWrapperValve, the JSP wrapper (Jasper) gets invoked
This results in the actual compilation of the JSP.
And then invokes the actual servlet.
e) Invokation of the servlet class

















Reference Website
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/architecture/startup.html
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
thank you,Somkiat Puisungnoen
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
i hear about new version of tomcat using eclipse compiler ..any can share the experience on it performance ?
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
do anyone know what is catalina means?
Richard Bradford
Ranch Hand

Joined: Apr 20, 2004
Posts: 48
Originally posted by Alvin chew:
do anyone know what is catalina means?


Catalina is the tomcat servlet container.
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
why they call it as catalina ? is there any special meaning of it ?
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
is it possible we set the tomcat which can reload itself, so that when we modify java file , we need not restart the tomcat
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
i hear about new version of tomcat using eclipse compiler ..any can share the experience on it performance ?



What does "eclipse compiler " mean ?

I think, you can deploy web application from eclipse to Tomcat Which use Plug-in or Ant or another tool.
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
do anyone know what is catalina means?


Catalina is a servlet container for Java based Web technologies. Developed by the Apache's Jakarta Project, this technology use thes Servlet and JavaServer Pages (JSP) specifications defined by the Sun Microsystems' Java team.
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
is it possible we set the tomcat which can reload itself, so that when we modify java file , we need not restart the tomcat


You can do it.

Solution : You should use Tomcat Manager to deploy/stop/strart/reload/undeploy web application
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Somkiat Puisungnoen:


Catalina is a servlet container for Java based Web technologies. Developed by the Apache's Jakarta Project, this technology use thes Servlet and JavaServer Pages (JSP) specifications defined by the Sun Microsystems' Java team.


Pui,
I guess you totally misunderstand the Alvin's question...
Richard Bradford has provided the same answer as you above, before you post this message about Catalina...

Alvin just wants to know the real meaning of catalina... The more ununderstandable question might be : "What does the word 'catalina' mean?" We may refer to a dictionary or encyclopedia to be able to answer his question... But honestly, I don't know what it means by "catalina"...
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
yes, exactly , ko ko , What does the word 'catalina' mean ...is my question, if this is a quiz , may be you can get a book from me
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
What does "eclipse compiler " mean ?

I think, you can deploy web application from eclipse to Tomcat Which use Plug-in or Ant or another tool.


i read some article on Jasper now uses EclipseJDT for compiling JSP pages, will this benefit to user ? in term of performance ?
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Alvin chew:
yes, exactly , ko ko , What does the word 'catalina' mean ...is my question, if this is a quiz , may be you can get a book from me


Mmm, I don't know what it means... I think it's not that good to pull the off-topic posts in the thread you created with on-topic subject...

We might need to lessen the off-topic posts, so that the Budi and Paul won't need to spend so much time on reading off-topics... We'd better use our greatest opportunity with them here in this week, since we cannot be so sure that they would be available to hang out here in the Ranch, after the book promotion...

Thanks...
Mike Curwen
Ranch Hand

Joined: Feb 20, 2001
Posts: 3695

Bundling the eclipse compiler means that Tomcat 5.5.x won't require a JDK. You'll only need a JRE to run Tomcat 5.5.x
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
i read some article on Jasper now uses EclipseJDT for compiling JSP pages, will this benefit to user ? in term of performance ?


Benefit :

you can see result of java after jsp compiled. And you can debug when error in jsp compile occurred.


Performance :
I think , it's not improve performance of Tomcat because when you deploy application on Tomcat, tomcat must compile jsp by jasper.
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
can tomcat set to specify number of user allow to logging in application ?
Ko Ko Naing
Ranch Hand

Joined: Jun 08, 2002
Posts: 3178
Originally posted by Alvin chew:
can tomcat set to specify number of user allow to logging in application ?


Alvin, this article about Jakarta Tomcat Performance Benchmark at TheServerSide.com might help you to see about the number of concurrent users suitable for Tomcat...

Hope it helps..
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

Originally posted by Alvin chew:
What does the word 'catalina' mean ...


It's just a name. There are cities and towns here and there that use that name; probably the most famous, though, is Santa Catalina Island, a resort island off the coast of Southern California.

Just like most software names -- Tomcat, Catalina, Java, Tiger -- it's just a word that sounds nice.


[Jess in Action][AskingGoodQuestions]
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
thank you, ko ko and Ernest Friedman-Hill
Budi Kurniawan
author
Greenhorn

Joined: Sep 15, 2004
Posts: 12
For rapid development, thought, you might not want to stop and restart Tomcat. What you need is the feature that automatically reloads the application when one of the classes or the web.xml file changes. Here is how you can configure Tomcat for a given application:

<Context path="/myApp" docBase="myApp" debug="8" reloadable="true"/>


By default, the background thread checks any new/modified file every 15 seconds. That's too long for some people, including me. I normally like to make it 7. Here is how:

<Context path="/myApp" docBase="/myapp" debug="8" reloadable="true">
<Loader className="org.apache.catalina.loader.WebappLoader" reloadable="true" checkInterval="7" debug="7"/>
</Context>

I've also written a loader for Struts development, which reloads the application if the struts-config.xml changes. You can download it from the book's website.


Author of <a href="http://www.amazon.com/exec/obidos/ASIN/097521280X/ref=jranch-20" target="_blank" rel="nofollow">How Tomcat Works</a>
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
thank you, mr.Budi Kurniawan,

between,

<Context path="/myApp" docBase="myApp" debug="8" reloadable="true"/>



what is debug=8 means ? and i see my is debug=0 ..
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
can we set domain name into tomcat which use for standalone web server ? if yes, how we set ?
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
thank you, mr.Budi Kurniawan,

between,



what is debug=8 means ? and i see my is debug=0 ..


Debug attribute is : http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html

The level of debugging detail logged by this Engine to the associated Logger. Higher numbers generate more detailed output. If not specified, the default debugging detail level is zero (0).

And in Logger : http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/logger.html


The verbosity level for this logger. Messages with a higher verbosity level than the specified value will be silently ignored. Available levels are 0 (fatal messages only), 1 (errors), 2 (warnings), 3 (information), and 4 (debug). If not specified, the default value will be 1 (error).

NOTE - Only messages logged with an explicit verbosity level are compared to this value. Messages logged with no explicit verbosity level are logged unconditionally.
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
is it possible i can make tomcat to hold two applications with their own URL, example, one for http://localhost/myjsp , another one for http://localhost:8082/anotherjsp,

by doing it so, i can use http://localhost/myjsp for development testing and http://localhost:8082/anotherjsp for my boss to see the developing application with no error..can i do that ? thank you !
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
can tomcat work with IIS ?
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
can tomcat work with IIS ?


Yes, you can setup tomcat work with IIS but for Tomcat 3.X, not Tomcat 4.x, 5.x.



Tomcat work with IIS

Moderator says: Versions 4.x and 5.x of Tomcat also work with IIS, though there may not be official documentation for it. It's a very common question on the tomcat-user email list.
[ September 17, 2004: Message edited by: Mike Curwen ]
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
Originally posted by Alvin chew:
is it possible i can make tomcat to hold two applications with their own URL, example, one for http://localhost/myjsp , another one for http://localhost:8082/anotherjsp,

by doing it so, i can use http://localhost/myjsp for development testing and http://localhost:8082/anotherjsp for my boss to see the developing application with no error..can i do that ? thank you !



Yes, you can.
Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
Somkiat Puisungnoen, can you please show me how to do it for the case of 2 URL running at the same time ? thank you !
somkiat puisungnoen
Ranch Hand

Joined: Jul 04, 2003
Posts: 1312
I'm using Tomcat 5.0.16

Solution
1. Configuration in server.xml :: add port 8082



2. I'm deploy sample web application into Tomcat Server using Tomcat Manager (http://localhost:8080/manager/html), use TestApp.war

3. After deploy TestApp.war, Tomcat/CAtalina should be created
%CATALINAHOME%/conf/catalina/localhost/TestApp.xml



For your question to ask me : create another url call to this web application (TestApp)
OK , I'm using http://localhost:8082/TestAppForBoss

And i must config /create TestAppForBoss.xml in %CATALINAHOME%/conf/catalina/localhost follow this ::




This will hekp you.

Alvin chew
Ranch Hand

Joined: Jan 08, 2004
Posts: 834
hi,Somkiat Puisungnoen , i want my server running 2 URL , one with no port like http://localhost and another one for port address which is http://localhost:8082 ..

so what i want is just add something inside <services> as you suggest ? then how about for http://localhost case ?

thank you !
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: How Tomcat Works book - development question