I'm trying to change the default application of a Tomcat 6 webserver to a different application than "ROOT" (inside webapps folder). What is the best way to do this?
13 Answers
There are three methods:
First shutdown your Tomcat from the its
bin
directory (sh shutdown.sh
). Then delete all the content of your Tomcatwebapps
folder (rm -fr *
). Then rename your WAR file toROOT.war
, and finally start your Tomcat from thebin
directory (sh startup.sh
).Leave your war file in
$CATALINA_BASE/webapps
under its original name. Turn off autoDeploy and deployOnStartup in your Host element in theserver.xml
file. Explicitly define all application Contexts inserver.xml
, specifying both the path and docBase attributes. You must do this because you have disabled all the Tomcat auto-deploy mechanisms, and Tomcat will not deploy your applications anymore unless it finds their Context in theserver.xml
.second method: in order to make any change to any application, you will have to stop and restart Tomcat.
Place your WAR file outside of
$CATALINA_BASE/webapps
(it must be outside to prevent double deployment). Place a context file namedROOT.xml
in$CATALINA_BASE/conf/
. The single element in this context file MUST have a docBase attribute pointing to the location of your WAR file. The path element should not be set - it is derived from the name of the.xml
file, in this caseROOT.xml
. See the documentation for the Context container for details.
-
4I tried the first method and it works! Bdw - you DON'T need to delete everything. I just deleted the ROOT folder and renamed my war to ROOT.war and it works like a charm. – hostnik Nov 04 '11 at 15:08
-
I know its not really following the sof rules but screw it..... Thanks! I wish I could upvote more than once. Super helpful. BTW, i _had_ to restart tomcat before this would work, @hostnik. – nasty pasty Feb 09 '12 at 03:22
-
@danny-london's third method didn't work for me in Tomcat 7, but it does work if you place the ROOT.xml file in the `$CATALINA_BASE/conf/[enginename]/[hostname]` directory (which for my rather basic setup is `$CATALINA_HOME/conf/Catalina/localhost`). Refer to [the Context Container documentation](http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Defining_a_context). – Michael Scheper Jun 14 '12 at 07:15
-
Modern alternative to starting Tomcat: `sudo systemctl start tomcatx` where `x` stands for the version number – aardbol Jun 19 '19 at 13:11
In Tomcat 7 with these changes, i'm able to access myAPP
at /
and ROOT
at /ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Add above to the <Host>
section in server.xml

- 8,910
- 3
- 33
- 43

- 2,499
- 2
- 23
- 28
-
Just the solution I was looking for! Thanks a million, Sudheer! Works like a charm for me. And hey! I have another question. When I do access the ROOT by `/ROOT` and try logging into the Manager page using the correct credentials, I'm denied access. Would you know how to fix this? – Saturnian Jul 27 '14 at 03:59
-
@Sudheer Palyam I did the same. I changed the server.xml file, and then I started the server. But when I loaded/visited the localhost:8080, it showed me 404 status error. If I delete these lines from server.xml, then It load the above port. – Sachin Kumar Mar 27 '17 at 18:56
Adding a <Context>
tag in the <Host>
tag in server.xml
for Tomcat 6 will resolve the problem.
If you use path=""
empty you can use a URL like http://localhost/first.do
.
In the context tag set attributes docBase="E:\struts-ITRCbook\myStrutsbook"
and reloadable="true"
, then end the context tag.
It should look something like this:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
-
-
4Per the documentation: For Tomcat 6, unlike Tomcat 4.x, it is NOT recommended to place
elements directly in the server.xml file. This is because it makes modifying the Context configuration more invasive since the main conf/server.xml file cannot be reloaded without restarting Tomcat. – Apr 28 '12 at 21:36 -
let notify this approach has side effect! myStrutsbook will deploy twice Once for localhost:8080 and once for localhost:8080/myStrutsbook ! and may cause database connection errors and more resource usage – Ali.Mojtahed May 02 '14 at 13:23
ROOT default app is usually Tomcat Manager - which can be useful so I felt like keeping it around.
So the way i made my app ROOT and kept TCmgr was like this.
renamed ROOT to something else
mv ROOT TCmgr
then created a symbolic link whereby ROOT points to the app i want to make the default.
ln -s <your app> ROOT
worked for me and seemed the easiest approach.
-
@Vic you are right, but windows does have symbolic links, in XP and above I think you can use mklink. Please note I have not done this and there my be other reasons not to use symbolic links. – MichaelStoner Apr 13 '15 at 11:59
According to the Apache Tomcat docs, you can change the application by creating a ROOT.xml file. See this for more info:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"The default web application may be defined by using a file called ROOT.xml."

- 62,090
- 32
- 125
- 150
You can do this in a slightly hack-y way by:
- Stop Tomcat
- Move ROOT.war aside and rm -rf webapps/ROOT
- Copy the webapp you want to webapps/ROOT.war
- Start Tomcat

- 20,760
- 5
- 52
- 82
-
2Ugly or maybe icky, but hacky might be the wrong term since that appears to be the official/supported method. – Brian Knoblauch Sep 08 '14 at 18:40
An alternative solution would be to create a servlet that sends a redirect to the desired default webapp and map that servlet to all urls in the ROOT webapp.
package com.example.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RedirectServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("/myRootWebapp");
}
}
Add the above class to
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
.
And add the following to CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml
:
<servlet>
<display-name>Redirect</display-name>
<servlet-name>Redirect</servlet-name>
<servlet-class>com.example.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
And if desired you could easily modify the RedirectServlet to accept an init param to allow you to set the default webapp without having to modify the source.
I'm not sure if doing this would have any negative implications, but I did test this and it does seem to work.

- 16,256
- 10
- 67
- 90

- 2,316
- 23
- 29
the context.xml configuration didn't work for me. Tomcat 6.0.29 complains about the docBase being inside the appBase: ... For Tomcat 5 this did actually work.
So one solution is to put the application in the ROOT folder.
Another very simple solution is to put an index.jsp to ROOT that redirects to my application like this: response.sendRedirect("/MyApplicationXy");
Best Regards, Jan

- 31
- 1
Ultimate way to change tomcat root application. Tested on Tomcat 7 and 8.
Move to the tomcat webapps directory:
Example on my machine:
~/stack/apache-tomcat/webapps
Rename, replace or delete ROOT folder. My advice is renaming or create a copy for backup. Example rename ROOT to RENAMED_ROOT:
mv ROOT RENAMED_ROOT
Move war file with your application to tomcat webapps directory (its a directory where was old ROOT folder, on my machine: ~/stack/apache-tomcat/webapps)
War file must have a name ROOT.war. Rename your aplication if it's need: yourApplicationName.war -> ROOT.war
- Restart tomcat. After restart your application will be a root.

- 5,889
- 34
- 34
I've got a problem when configured Tomcat' server.xml
and added Context element.
He just doesn't want to use my config:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
If you're in a Unix-like
system:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Done.
Works for me.

- 11,623
- 10
- 57
- 76

- 61
- 4
Not a very good solution but one way is to redirect from the ROOT app to YourWebApp. For this you need to modify the ROOT index.html.
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
OR
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
Reference : http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

- 6,453
- 2
- 40
- 36
I'll look at my docs; there's a way of specifying a configuration to change the path of the root web application away from ROOT (or ROOT.war), but it seems to have changed between Tomcat 5 and 6.
Found this:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
So, it seems that changing the root path (in ROOT.xml) is possible, but a bit broken -- you need to move your WAR outside of the auto-deployment directory. Mind if I ask why just renaming your file to ROOT.war isn't a workable solution?

- 5,100
- 2
- 26
- 32
-
1Unfortunately changing the war file to ROOT.war is not an option for me. Jacques – Apr 03 '09 at 20:19
-
a bit late, but... for me i can't change it because i am using a system created by a third party, who seems to have hard coded some locations to jar files.... so moving it to ROOT.war makes a problem, since the original application looks for its own jar under a directory which is in [originalapp.war] – mur Nov 23 '16 at 13:07
In Tomcat 7 (under Windows server) I didn't add or edit anything to any configuration file. I just renamed the ROOT folder to something else and renamed my application folder to ROOT and it worked fine.

- 1
-
1This might be a good workaround, but Jaques' question is about how to change the default application; there may be reasons why he cannot change the contents of the ROOT folder. – JVMATL Jan 17 '14 at 15:58