krigsfilstruktur

Varje webbapplikation, när den laddas upp till webbservern, paketeras i en enda .war-fil. WAR står nu för Web Application Resources, även om det brukade vara Web ARchive. I själva verket är detta ett zip-arkiv som innehåller en paketerad webbapplikation.

Så här ser det typiska innehållet i en krigsfil ut:

/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

Inuti krigsfilen finns statiska webbresurser som .html, .css, .js-filer och så vidare. Det kan också finnas bilder, videor och i allmänhet alla filer. De kan finnas i roten eller i undermappar, det spelar ingen roll. Tomcat kommer helt enkelt att servera dem om de efterfrågas.

Låt oss säga att din webbapplikation laddas på webbservern under namnet apple, och när http://localhost/apple/images/logo.png efterfrågas kommer Tomcat att returnera filen /images/logo.png .

Separat är det värt att notera WEB-INF-mappen . Den är utformad för att lagra Java-kod i den. Tomcat kommer inte att ge ut innehållet.

/WEB-INF/klasser/ katalog för kompilerade icke-JAR Java-klasser, inklusive servletklasser och resursfiler som behövs av laddaren innan programmet körs
/WEB-INF/lib/ plats att lagra burkbibliotek
/WEB-INF/web.xml distributionsbeskrivning

krigsfilstruktur och maven-projekt

Låt oss nu gå vidare till kataloghierarkin för Maven-projektet. Du kan se hela kataloglayouten i den officiella manualen. Här kommer vi att bekanta oss med den i en något förkortad version, exklusive testresurser. Så, Mavens standardkataloghierarki ser ut så här:

src/main/java källkoder för applikationsklasser och bibliotek i enlighet med den allmänt accepterade pakethierarkin
src/main/resources programresursfiler: databasinställningar, lokaliseringsfiler, etc.
src/main/webapp webbapplikationsresurser (JSP-filer, textfiler, skript, etc.)

Som du kan se skiljer den sig markant från strukturen i WAR-filen som du känner till. Men vad som faktiskt händer när man kompilerar en webbapplikation är helt enkelt att flytta och sammanfoga filer till strukturen som definieras i Java EE-specifikationen.

Katalogen src/main/webapp definierar kontextroten för webbapplikationen (när den distribueras till en server är kontextroten samma som namnet på WAR-filen) och innehåller redan WEB-INF-katalogen i den. Det vill säga att innehållet i src/main/webapp överförs helt till webbapplikationen.

Alla dina Java-klasser kompileras till klassfiler och, med behålla sin paketstruktur, flyttas de till katalogen /WEB-INF/classes/ . JAR:erna för de inkluderade biblioteken, som är definierade i Maven pom.xml-beroenden som vi definierade ovan, flyttas till katalogen / WEB-INF/lib/ .

Applikationsresurser src/main/resources flyttas till applikationens klasssökväg, specifikt till samma /WEB-INF/classes/ -katalog .

För att göra det helt klart, titta på det här diagrammet, som hjälper dig att förstå hur och vad som går vart när du bygger ett projekt:

krigsfilsenhet