1
votes

I've copied my .war into the webapps folder of my local tomcat server. When I start tomcat, the .war gets exploded to a different structure than when I manually explode it with jar -xf. When I manually explode the .war, I get the WEB-INF folder as a child of the app folder (below). This is what I want.

Both startup fine, but when tomcat explodes my war, sending request for resources always returns 404. I think WEB-INF needs to be the child of the exploded war directory for requests to return 200. Manually exploding the .war inside webapps and then running tomcat works and also stopping tomcat after it has auto-exploded the war, moving the WEB-INF one level up, and then restarting tomcat also works.

Is there a way to package my war so that tomcat will explode it with WEB-INF as the immediate child of the exploded war directory? And why is tomcat exploding the war any differently than jar -xf?

TOMCAT

exploded_war
├── app_name
│   └── WEB-INF
│       ├── classes
│       │   └── ...
│       ├── servlet.xml
│       ├── lib
│       │   ├── ...
│       └── web.xml
└── META-INF
    └── ...

MANUAL

exploded_war
└── WEB-INF
    ├── classes
    │   └── ...
    ├── servlet.xml
    ├── lib
    │   ├── ...
    └── web.xml

EDIT - Here is my build script executed in the project folder -

mvn package
cp src/WEB-INF/*.xml /target/app_name/WEB-INF 
cd target
jar -cvf app_name.war app_name/WEB-INF 
cp app_name.war {path_to}/apache-tomcat-8.5.13/webapps
1
How are you generating your WAR file? Manually? Using an IDE? Using a script like Ant?VivekRatanSinha
With a build script using maven. I added it to my original postDavid Streid

1 Answers

2
votes

Your WAR file structure is incorrect. WAR file must not contain application name folder at its root. You need to drop app_name folder from the jar command.

    mvn package
    cp src/WEB-INF/*.xml /target/app_name/WEB-INF 
    cd target/app_name
    jar -cvf ../app_name.war WEB-INF 
    cd ..
    cp app_name.war {path_to}/apache-tomcat-8.5.13/webapps

See the following screenshot for example:

WAR Structure