Hoe een WAR-bestand op Tomcat te implementeren

1. Overzicht

Apache Tomcat is een van de meest populaire webservers in de Java-gemeenschap. Het wordt verzonden als een servlet container geschikt voor het leveren van webarchieven met de WAR-extensie.

Het biedt een managementdashboard van waaruit u een nieuwe webtoepassing kunt implementeren of een bestaande kunt verwijderen zonder de container opnieuw te hoeven starten. Dit is vooral handig in productieomgevingen.

In dit artikel zullen we een kort overzicht van Tomcat geven en vervolgens verschillende benaderingen behandelen voor het implementeren van een WAR-bestand.

2. Tomcat-structuur

Voordat we beginnen, moeten we ons vertrouwd maken met enkele terminologie en omgevingsvariabelen.

2.1. Omgevingsvariabelen

Als je eerder met Tomcat hebt gewerkt, zullen deze je erg bekend voorkomen:

$ CATALINA_HOME

Deze variabele verwijst naar de directory waar onze server is geïnstalleerd.

$ CATALINA_BASE

Deze variabele verwijst naar de directory van een bepaald exemplaar van Tomcat, mogelijk zijn er meerdere exemplaren geïnstalleerd. Als deze variabele niet expliciet is ingesteld, krijgt deze dezelfde waarde als $ CATALINA_HOME.

Webapplicaties worden ingezet onder de $ CATALINA_HOME \ webapps directory.

2.2. Terminologie

Document root. Verwijst naar de directory op het hoogste niveau van een webtoepassing, waar alle toepassingsbronnen zich bevinden, zoals JSP-bestanden, HTML-pagina's, Java-klassen en afbeeldingen.

Contextpad. Verwijst naar de locatie die relatief is aan het serveradres en vertegenwoordigt de naam van de webapplicatie.

Als onze webapplicatie bijvoorbeeld onder de $ CATALINA_HOME \ webapps \ mijnapp directory, wordt deze geopend via de URL // localhost / mijnapp, en het contextpad zal zijn / mijnapp.

OORLOG. Is de extensie van een bestand dat een directoryhiërarchie van webtoepassingen verpakt in ZIP-indeling en is een afkorting voor Web Archive. Java-webtoepassingen worden meestal verpakt als WAR-bestanden voor implementatie. Deze bestanden kunnen worden gemaakt op de opdrachtregel of met een IDE zoals Eclipse.

Nadat we ons WAR-bestand hebben geïmplementeerd, pakt Tomcat het uit en slaat alle projectbestanden op in het webapps map in een nieuwe map met de naam van het project.

3. Tomcat-instellingen

De Tomcat Apache-webserver is gratis software die kan worden gedownload vanaf hun website. Het is vereist dat er een JDK beschikbaar is op de computer van de gebruiker en dat het JAVA_HOME omgevingsvariabele is correct ingesteld.

3.1. Start Tomcat

We kunnen de Tomcat-server starten door simpelweg het opstarten script gelegen op $ CATALINA_HOME \ bin \ opstarten. Er is een .knuppel en een .sh in elke installatie.

Kies de juiste optie, afhankelijk van of u een op Windows of Unix gebaseerd besturingssysteem gebruikt.

3.2. Configureer rollen

Tijdens de implementatiefase hebben we enkele opties, waaronder het gebruik van het beheerdashboard van Tomcat. Om toegang te krijgen tot dit dashboard, moeten we een admin-gebruiker hebben geconfigureerd met de juiste rollen.

Om toegang te hebben tot het dashboard heeft de admin-gebruiker het manager-gui rol. Later zullen we een WAR-bestand moeten implementeren met behulp van Maven, hiervoor hebben we het manager-script rol ook.

Laten we deze wijzigingen aanbrengen in $ CATALINA_HOME \ conf \ tomcat-gebruikers:

Meer details over de verschillende Tomcat-rollen zijn te vinden door deze officiële link te volgen.

3.3. Stel Directory-machtigingen in

Zorg er ten slotte voor dat er lees- / schrijfrechten zijn voor de Tomcat-installatiemap.

3.4. Test installatie

Om te testen of Tomcat correct is ingesteld, voert u het opstartscript uit (startup.bat/startup.sh), als er geen fouten op de console worden weergegeven, kunnen we dit dubbel controleren door naar // localhost: 8080.

Als je de landingspagina van Tomcat ziet, hebben we de server correct geïnstalleerd.

3.5. Los het poortconflict op

Tomcat is standaard ingesteld om naar verbindingen op de poort te luisteren 8080. Als er al een andere applicatie aan deze poort is gebonden, laat de opstartconsole ons dit weten.

Om de poort te wijzigen, kunnen we het serverconfiguratiebestand bewerken server.xml gevestigd in $ CATALINA_HOME \ conf \ server.xml. Standaard is de connectorconfiguratie als volgt:

Als we bijvoorbeeld onze poort willen veranderen in 8081, dan zullen we het poortkenmerk van de connector als volgt moeten wijzigen:

Soms is de poort die we hebben gekozen niet standaard open, in dit geval zullen we deze poort moeten openen met de juiste commando's in de Unix-kernel of de juiste firewallregels in Windows moeten aanmaken, hoe dit wordt gedaan valt buiten het bereik van Dit artikel.

4. Implementeren vanuit Maven

Als we Maven willen gebruiken voor het implementeren van onze webarchieven, moeten we Tomcat configureren als een server in Maven's settings.xml het dossier.

Er zijn twee locaties waar de settings.xml bestand kan worden gevonden:

  • De Maven-installatie: $ {maven.home} /conf/settings.xml
  • De installatie van een gebruiker: $ {user.home} /. m2 / settings.xml

Als je het eenmaal hebt gevonden, voeg je Tomcat als volgt toe:

 TomcatServer admin-wachtwoord 

We zullen nu een basiswebtoepassing van Maven moeten maken om de implementatie te testen. Laten we navigeren naar waar we de applicatie willen maken.

Voer deze opdracht uit op de console om een ​​nieuwe Java-webtoepassing te maken:

mvn-archetype: genereer -DgroupId = com.baeldung -DartifactId = tomcat-war-deployment -DarchetypeArtifactId = maven-archetype-webapp -DinteractiveMode = false

Dit zal een complete webapplicatie in de directory creëren tomcat-war-inzet die, als we nu implementeren en openen via de browser, wordt afgedrukt Hallo Wereld!.

Maar voordat we dat doen, moeten we één wijziging aanbrengen om Maven-implementatie mogelijk te maken. Dus ga naar de pom.xml en voeg deze plug-in toe:

 org.apache.tomcat.maven tomcat7-maven-plugin 2.2 // localhost: 8080 / manager / tekst TomcatServer / mijnapp 

Merk op dat we de Tomcat 7-plug-in gebruiken omdat deze voor beide versies 7 en 8 werkt zonder speciale wijzigingen.

De configuratie url is de url waarnaar we onze implementatie sturen, Tomcat weet wat hij ermee moet doen. De server element is de naam van de serverinstantie die Maven herkent. eindelijk, de pad element definieert het contextpad van onze inzet.

Dit betekent dat als onze implementatie slaagt, we toegang krijgen tot de webapplicatie door op te drukken // localhost: 8080 / myapp.

Nu kunnen we de volgende opdrachten vanuit Maven uitvoeren.

Om de web-app te implementeren:

mvn tomcat7: implementeren

Om het ongedaan te maken:

mvn tomcat7: undeploy

Om opnieuw te implementeren na het aanbrengen van wijzigingen:

mvn tomcat7: opnieuw implementeren

5. Implementeren met Cargo-plug-in

Cargo is een veelzijdige bibliotheek waarmee we de verschillende soorten applicatiecontainers op een gestandaardiseerde manier kunnen manipuleren.

5.1. Installatie van ladingimplementatie

In deze sectie zullen we bekijken hoe we de Maven-plug-in van Cargo kunnen gebruiken om een ​​WAR naar Tomcat te implementeren, in dit geval zullen we deze implementeren op een instantie van versie 7.

Om grip te krijgen op het hele proces, beginnen we helemaal opnieuw met het maken van een nieuwe Java-webapplicatie vanaf de opdrachtregel:

mvn-archetype: genereer -DgroupId = com.baeldung -DartifactId = vracht-inzet -DarchetypeArtifactId = maven-archetype-webapp -DinteractiveMode = false

Hiermee wordt een complete Java-webtoepassing gemaakt in de lading-inzetten directory. Als we deze applicatie bouwen, implementeren en laden zoals hij is, wordt deze afgedrukt Hallo Wereld! in de browser.

In tegenstelling tot de Tomcat7 Maven-plug-in, vereist de Cargo Maven-plug-in dat dit bestand aanwezig is.

Omdat onze webapplicatie geen servlets bevat, is onze web.xml bestand zal erg basic zijn. Dus navigeer naar het WEB-INF map van ons nieuw aangemaakte project en maak een web.xml bestand met de volgende inhoud:

  cargo-deploy index.jsp 

Om Maven in staat te stellen de commando's van Cargo te herkennen zonder de volledig gekwalificeerde naam te typen, moeten we de Cargo Maven-plug-in toevoegen aan een plug-in-groep in Maven's settings.xml.

Als een direct kind van de wortel element, voeg dit toe:

 org.codehaus.cargo 

5.2. Lokale implementatie

In deze onderafdeling zullen we onze pom.xml om aan onze nieuwe implementatievereisten te voldoen.

Voeg de plug-in als volgt toe:

   org.codehaus.cargo cargo-maven2-plugin 1.5.0 tomcat7x geïnstalleerd Absolute pad naar installatie tomcat 7 invoegen bestaand absoluut pad naar installatie tomcat 7 invoegen 

De nieuwste versie, op het moment van schrijven, is 1.5.0. De laatste versie is hier echter altijd te vinden.

Merk op dat we de verpakking expliciet als een WAR definiëren, zonder dit zal onze build mislukken. In de sectie plug-ins voegen we vervolgens de cargo maven2-plug-in toe. Bovendien, we voegen een configuratiegedeelte toe waarin we Maven vertellen dat we een Tomcat-container gebruiken en ook een bestaande installatie.

Door het containertype in te stellen op geïnstalleerd, we vertellen Maven dat we een instantie op de machine hebben geïnstalleerd en we geven de absolute URL naar deze installatie.

Door het configuratietype in te stellen op bestaande, vertellen we Tomcat dat we een bestaande setup hebben die we gebruiken en dat er geen verdere configuratie nodig is.

Het alternatief zou zijn om Cargo te vertellen dat de gespecificeerde versie moet worden gedownload en ingesteld door een URL op te geven. Onze focus ligt echter op WAR-implementatie.

Het is vermeldenswaard dat of we nu Maven 2.x of Maven 3.x gebruiken, de cargo maven2-plug-in voor beide werkt.

We kunnen onze applicatie nu installeren door het volgende uit te voeren:

mvn installeren

en het inzetten door te doen:

mvn lading: inzetten

Als alles goed gaat, zouden we onze webapplicatie moeten kunnen draaien door te laden // localhost: 8080 / cargo-deploy.

5.3. Implementatie op afstand

Om een ​​implementatie op afstand uit te voeren, hoeven we alleen het configuratiegedeelte van ons pom.xml. Implementatie op afstand betekent dat we geen lokale installatie van Tomcat hebben, maar toegang hebben tot het beheerdersdashboard op een externe server.

Dus laten we de pom.xml zodat de configuratiesectie er als volgt uitziet:

  tomcat8x remote runtime admin admin // localhost: 8080 / manager / text 

Deze keer wijzigen we het containertype van geïnstalleerd naar afgelegen en het configuratietype van bestaande naar looptijd. Ten slotte voegen we authenticatie en externe URL-eigenschappen toe aan de configuratie.

Zorg ervoor dat de rollen en gebruikers al aanwezig zijn in $ CATALINA_HOME / conf / tomcat-users.xml net als voorheen.

Als u hetzelfde project bewerkt voor afgelegen implementatie, maak eerst de implementatie van de bestaande WAR ongedaan:

mvn vracht: undeploy

maak het project schoon:

mvn schoon

installeer het:

mvn installeren

implementeer het ten slotte:

mvn lading: inzetten

Dat is het.

6. Implementeren vanuit Eclipse

Met Eclipse kunnen we servers insluiten om webprojectimplementatie toe te voegen aan de normale workflow zonder de IDE te verlaten.

6.1. Sluit Tomcat in Eclipse in

We kunnen een installatie in Eclipse insluiten door de venster menu-item van de taakbalk en vervolgens voorkeuren uit de vervolgkeuzelijst.

We zullen een boomstructuur met voorkeursitems vinden in het linkerpaneel van het venster dat verschijnt. We kunnen dan navigeren naar eclipse -> servers of typ gewoon servers in de zoekbalk.

We selecteren vervolgens de installatiemap, als deze nog niet voor ons open is, en kiezen de Tomcat-versie die we hebben gedownload.

Aan de rechterkant van het paneel zal een configuratiepagina verschijnen waar we de optie Inschakelen selecteren om deze serverversie te activeren en naar de installatiemap bladeren.

We passen wijzigingen toe, en de volgende keer dat we de serverweergave openen vanuit Eclipse's windows -> show view submenu, zal de nieuw geconfigureerde server aanwezig zijn en kunnen we applicaties starten, stoppen en implementeren.

6.2. Implementeer een webtoepassing in Embedded Tomcat

Om een ​​webtoepassing op Tomcat te implementeren, moet deze in onze werkruimte aanwezig zijn.

Open de servers uitzicht vanaf venster -> weergave weergeven en zoek naar servers. Indien geopend, kunnen we gewoon met de rechtermuisknop klikken op de server die we hebben geconfigureerd en selecteren implementatie toevoegen vanuit het contextmenu dat verschijnt.

Van de Nieuwe implementatie dialoogvenster dat verschijnt, open het project dropdownmenu en selecteer het webproject.

Er is een Type implementeren sectie onder de Project keuzelijst met invoervak ​​wanneer we selecteren Exploded Archive (ontwikkelmodus), onze wijzigingen in de applicatie worden live gesynchroniseerd zonder opnieuw te hoeven implementeren, dit is de beste optie tijdens de ontwikkeling, aangezien het zeer efficiënt is.

Selecteren Verpakt archief (productiemodus) vereist dat we elke keer dat we wijzigingen aanbrengen opnieuw implementeren en deze in de browser zien. Dit is alleen het beste voor productie, maar toch maakt Eclipse het even gemakkelijk.

6.3. Implementeer een webapplicatie op een externe locatie

We kiezen er meestal voor om een ​​WAR via Eclipse te implementeren om foutopsporing te vergemakkelijken. Er kan een tijd komen dat we willen dat het wordt geïmplementeerd op een andere locatie dan die wordt gebruikt door de ingebouwde servers van Eclipse. De meest voorkomende instantie is waar onze productieserver online is en we de webapplicatie willen updaten.

We kunnen deze procedure omzeilen door in productiemodus te implementeren en de Implementeer locatie in de Nieuwe implementatie dialoogvenster en het kiezen van de OORLOG van daaruit.

Tijdens de implementatie kunnen we, in plaats van een ingesloten server te selecteren, het optie van de servers weergave naast de lijst met ingesloten servers. We navigeren naar de webapps directory van een externe Tomcat-installatie.

7. Implementeren vanuit IntelliJ IDEA

Om een ​​webtoepassing op Tomcat te implementeren, moet deze bestaan ​​en al zijn gedownload en geïnstalleerd.

7.1. Lokale configuratie

Open de Rennen menu en klik op het Configuraties bewerken opties.

Zoek in het paneel aan de linkerkant naar Tomcat-server, als het er niet is, klik op het + teken in het menu, zoek naar Kater en selecteer Lokaal. Zet in het naamveld Kater 7/8 (afhankelijk van uw versie).

Klik op de Configureren ... knop en in Tomcat Home navigeer naar de thuislocatie van uw installatie en selecteer deze.

Stel desgewenst het Opstarten pagina te zijn // localhost: 8080 / en HTTP-poort: 8080, wijzig de poort zoals gewenst.

Ga naar het Inzet tab en klik op het + -symbool, selecteer het artefact dat u aan de server wilt toevoegen en klik op OK

7.2. Configuratie op afstand

Volg dezelfde instructies als voor lokale Tomcat-configuraties, maar op het servertabblad moet u de externe locatie van de installatie invoeren.

8. Implementeren door archief te kopiëren

We hebben gezien hoe je een WAR uit Eclipse kunt exporteren. Een van de dingen die we kunnen doen, is het implementeren door het simpelweg in het $ CATALINA_HOME \ webapps directory van een Tomcat-instantie. Als de instantie actief is, start de implementatie onmiddellijk wanneer Tomcat het archief uitpakt en het contextpad configureert.

Als de instantie niet actief is, implementeert de server het project de volgende keer dat het wordt gestart.

9. Implementeren vanuit Tomcat Manager

Ervan uitgaande dat we ons WAR-bestand al bij de hand hebben en het willen implementeren met behulp van het beheerdashboard. U kunt het beheerdersdashboard openen door naar: // localhost: 8080 / manager.

Het dashboard heeft vijf verschillende secties: Manager, Toepassingen, Inzetten, Diagnostiek, en Server informatie. Als je naar het Inzetten sectie vindt u twee subsecties.

9.1. Implementeer de directory of het WAR-bestand op de server

Als het WAR-bestand zich op de server bevindt waarop de Tomcat-instantie wordt uitgevoerd, kunnen we het vereiste Contextpad veld voorafgegaan door een schuine streep "/".

Laten we zeggen dat we willen dat onze webtoepassing wordt geopend vanuit de browser met de URL // localhost: 8080 / myapp, dan heeft ons contextpadveld / mijnapp.

We slaan de URL van XML-configuratiebestand veld en ga naar de WAR of Directory-URL veld. Hier voeren we de absolute URL in naar het Web ARchive-bestand zoals het op onze server verschijnt. Laten we zeggen dat de locatie van ons bestand is C: /apps/myapp.war, dan voeren we deze locatie in. Vergeet de WAR-extensie niet.

Daarna kunnen we klikken inzetten knop. De pagina wordt opnieuw geladen en we zouden het bericht moeten zien:

OK - geïmplementeerde applicatie op contextpad / mijnapp

bovenaan de pagina.

Bovendien zou onze applicatie ook moeten verschijnen in het Toepassingen sectie van de pagina.

9.2. WAR-bestand om te implementeren

Klik gewoon op het kies bestand , navigeer naar de locatie van het WAR-bestand, selecteer het en klik op het inzetten knop.

In beide situaties, als alles goed gaat, zal de Tomcat-console ons laten weten dat de implementatie is gelukt met een bericht als het volgende:

INFO: Implementatie van webtoepassingsarchief \ pad \ naar \ deployed_war is voltooid in 4833 ms

10. Conclusie

In dit artikel hebben we ons gericht op het implementeren van een WAR in een Tomcat-server.