I want to deploy myapp in tomcat server. I know one way is to delete the Root folder from webapps and rename my app.war as ROOT.WAR. But i do not want to do this. I want to deploy like when user access my app as www.xxx.com , it should go to my app like www.xxx.com/login.html. Please help
3 Answers
You can deploy any WAR file (or exploded WAR directory) from (almost) anywhere with any context name you want, as long as it doesn't conflict with any auto-deployed application. Here's how:
Remove any conflicting applications from
webapps/(in this case, really, it's justROOT)Move your own application someplace other than in
webapps/Copy the
META-INF/context.xmlfile from your application and place it into Tomcat'sconf/[engine]/[host]/[contextpath].xml– for exampleconf/Catalina/localhost/ROOT.xmlEdit
conf/[engine]/[host]/[contextpath].xmland add this attribute to the<Context>element:docBase="/path/to/your/WAR.war"
Now, Tomcat will deploy /path/to/your/WAR.war on context path / (because the deployment descriptor's filename is ROOT), and you didn't have to modify conf/server.xml.
Who cares about modifying conf/server.xml? Well, that file is only read once during container startup, so if you want to make changes, undeploy, redeploy, etc. you must restart the entire container to pick-up those changes. It's much better to use Tomcat's auto-deployment facility, which as you can see is quite flexible.
All of this is laid out in Tomcat's documentation on defining contexts where, incidentally, the very first sentence makes it clear that defining a context in server.xml is a bad practice.
5 Comments
localhost:port/myapp instead of localhost:port/. This is on Tomcat 9.0.20. I am deleting ROOT from webapps, copying myapp.war to tomcat/app which is a custom location, copying myapp.xml to /usr/local/tomcat/conf/Catalina/localhost/ which contains <Context docBase="/usr/local/tomcat/app/myapp.war"></Context>. Can you help me figure out what I am doing wrong?ROOT.xml instead of myapp.xml. Tomcat derives the context path from the name of the XML file, and the name ROOT.xml is treated specially by using a zero-length string as the context-path.webapps directory, then it will be deployed twice if you use the method detailed in this answer. Note in step 2 it says Move your own application someplace other than in webapps/.webapps folder? Using ROOT.war is. by far, much simpler so it would be very helpful to understand why we should favor much more complex solution described above.You have several options to set a root application. (see https://stackoverflow.com/a/5328636/6371459)
Remove
ROOTdirectory and deploy your war asROOT.warDeploy your war in
webappsand configure the context root inconf/server.xmlto use your war file (not recommended because requires restarting)Create a specific context file
$CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xmland setdocBase=your_war_namelike previous2)(see @ChristopherShultz answer)
Since you have discarded option 1, and option 2 is not recommended, I suggest use a context file
2 Comments
Context in server.xml is a Bad Idea.Configuration file is server.xml
You can just follow this example : https://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-server-xml-configuration-example/
referencing tomcat documentation : http://tomcat.apache.org/tomcat-7.0-doc/config/context.html