struttura del file di guerra

Ogni applicazione Web, quando viene caricata sul server Web, viene impacchettata in un singolo file .war. WAR ora sta per Web Application Resources, anche se prima era Web Archive. In realtà, questo è un archivio zip che contiene un'applicazione web in pacchetto.

Ecco come appare il contenuto tipico di un file war:

/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

All'interno del file war ci sono risorse web statiche come file .html, .css, .js e così via. Inoltre possono esserci immagini, video e in generale qualsiasi file. Possono essere nella radice o nelle sottocartelle, non importa. Tomcat li servirà semplicemente se richiesti.

Supponiamo che la tua applicazione web sia caricata sul server web con il nome apple, quindi quando viene richiesto http://localhost/apple/images/logo.png , Tomcat restituirà il file /images/logo.png .

Separatamente, vale la pena notare la cartella WEB-INF . È progettato per memorizzare il codice Java al suo interno. Tomcat non distribuirà il suo contenuto.

/WEB-INF/classi/ directory per le classi Java non JAR compilate, comprese le classi servlet e i file di risorse necessari al caricatore prima di eseguire l'applicazione
/WEB-INF/lib/ luogo in cui archiviare le librerie jar
/WEB-INF/web.xml descrittore di distribuzione

struttura del file war e progetto maven

Passiamo ora alla gerarchia delle directory del progetto Maven. Puoi vedere il layout completo del catalogo nel manuale ufficiale. Qui lo conosceremo in una versione un po 'abbreviata, escluse le risorse di test. Quindi, la gerarchia di directory standard di Maven è simile a questa:

src/principale/java codici sorgente di classi e librerie di applicazioni in conformità con la gerarchia dei pacchetti generalmente accettata
src/principale/risorse file di risorse dell'applicazione: impostazioni del database, file di localizzazione, ecc.
src/principale/webapp risorse per applicazioni web (file JSP, file di testo, script, ecc.)

Come puoi vedere, differisce in modo significativo dalla struttura del file WAR che conosci. Ma ciò che effettivamente accade durante la compilazione di un'applicazione Web è semplicemente spostare e concatenare i file nella struttura definita nella specifica Java EE.

La directory src/main/webapp definisce la root di contesto dell'applicazione Web (quando distribuita su un server, la root di contesto è uguale al nome del file WAR) e contiene già la directory WEB-INF al suo interno. Cioè, i contenuti di src/main/webapp vengono completamente trasferiti all'applicazione web.

Tutte le tue classi Java vengono compilate in file di classe e, mantenendo la loro struttura di pacchetto, vengono spostate nella directory /WEB-INF/classes/ . I JAR delle librerie incluse, che sono definite nelle dipendenze Maven pom.xml come definito sopra, vengono spostati nella directory /WEB-INF/lib/ .

Le risorse dell'applicazione src/main/resources vengono spostate nel classpath dell'applicazione, in particolare nella stessa directory /WEB-INF/classes/ .

Per renderlo completamente chiaro, guarda questo diagramma, che ti aiuterà a capire come e cosa va dove quando costruisci un progetto:

dispositivo di file di guerra