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:
GO TO FULL VERSION