Creare un'app Web Java

Completato

La società sta attualmente eseguendo diverse app Web Java su server interni. Per ridurre i costi elevati associati alla gestione di questi server, l'azienda vuole eseguire la migrazione delle app Web a Servizio app di Azure.

Il team di sviluppo ha esperienza con l'uso di Maven per creare app desktop e Maven viene già usato per automatizzare il processo di compilazione per i progetti Java. Sapendo che Maven usa alcuni plug-in per i progetti per aggiungere ulteriori funzionalità, si vuole usare un archetipo per creare un'app Web che può essere distribuita in Servizio app di Azure.

In questa unità si riesaminerà come Maven e gli archetipi consentano di creare app Web Java. Si apprenderà come creare una piccola app Web Java ed eseguirla in locale. Poi, si apprenderà cosa aggiungere al file POM (Project Object Model) per abilitare i test locali per la nuova app.

Uso di Maven per automatizzare la compilazione di app Web Java

Maven è lo strumento di compilazione Java più usato e può essere utilizzato per creare e gestire di qualsiasi progetto basato su Java. Consente di semplificare i processi di sviluppo di progetti Java grazie a un metodo standard per compilare i progetti, una definizione chiara degli elementi che costituiscono il progetto, un modo semplice per pubblicare informazioni sul progetto e un modo per condividere i file JAR in diversi progetti. Gli obiettivi di Maven sono:

  • Semplificare il processo di compilazione.
  • Eseguire la migrazione alle nuove funzionalità in modo trasparente.
  • Fornire un sistema di compilazione uniforme.
  • Implementare linee guida sulle procedure consigliate per lo sviluppo.

Informazioni sugli archetipi

Gli autori di Maven, dovendo creare una procedura consigliata coerente che gli sviluppatori potessero seguire per strutturare i nuovi progetti, hanno scoperto che esistono alcune analogie tra i diversi tipi di progetti. Gli autori hanno usato tali informazioni per definire questi tipi di progetti come modelli, denominati archetipi, usati da Maven per creare rapidamente lo scaffolding per i nuovi progetti. Di seguito sono riportati alcuni esempi di archetipi comuni:

Archetipo Descrizione
maven-archetype-archetype Genera un progetto archetipo
maven-archetype-mojo Genera un plug-in Maven di esempio
maven-archetype-plugin Genera un plug-in Maven
maven-archetype-plugin-site Genera un sito di plug-in Maven
maven-archetype-quickstart Genera un progetto Maven
maven-archetype-simple Genera un progetto Maven semplice
maven-archetype-site Genera un sito Maven che illustra alcuni dei tipi di documenti supportati, ad esempio APT, XDoc e FML
maven-archetype-site-simple Genera un sito Maven semplice
maven-archetype-webapp Genera un progetto app Web Maven

Nell'esercizio successivo si creerà un'app Web che è possibile distribuire in Azure. Ad esempio, per creare una nuova app Web Java con Maven, usare la sintassi seguente:

mvn archetype:generate \
  -DgroupId=com.microsoft.example \
  -DartifactId=MyWebApp \
  -DarchetypeArtifactId=maven-archetype-webapp \
  -DarchetypeVersion=1.4 \
  -DinteractiveMode=false

L'esecuzione del comando precedente crea una struttura di directory di progetto con questo contenuto:

Gerarchia di file e cartelle del progetto.

Informazioni sui file POM (Project Object Model)

Uno dei componenti di base di un progetto Maven è un POM (Project Object Model), ovvero un documento XML denominato pom.xml che si trova nell'albero di directory di un progetto. Il file POM contiene le proprietà, le dipendenze, le fasi di compilazione, i plug-in e gli obiettivi per un progetto. Quando si compila l'applicazione, Maven gestirà automaticamente le dipendenze.

Maven si basa su un framework di plug-in e gli sviluppatori definiscono gli obiettivi per i progetti aggiungendo i plug-in a un file POM. Quando si esegue Maven, è possibile eseguire un obiettivo specifico usando la sintassi mvn [plugin-name]:[goal-name] e Maven eseguirà tutti gli obiettivi fino all'obiettivo [goal-name] specificato.

L'esempio seguente illustra il contenuto del file pom.xml generato dal comando mvn archetype:generate con l'archetipo maven-archetype-webapp nella sezione precedente di questa unità.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.microsoft.example</groupId>
  <artifactId>MyWebApp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>MyWebApp Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>MyWebApp</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      ...
    </pluginManagement>
  </build>
</project>

Come aggiungere i plug-in a un progetto Maven

Per aggiungere un plug-in al progetto Maven, è necessario aggiungere il codice XML specifico per tale plug-in al file pom.xml. Sono disponibili due utili plug-in che consentono agli sviluppatori di eseguire le app Web in locale nei computer: Eclipse Jetty e Apache Tomcat. Il plug-in del Servizio app di Azure supporta entrambi questi server Web. Per aggiungere uno di questi server al progetto, si aggiungerà il codice XML necessario per il plug-in al tag <plugins>.

Ad esempio, per aggiungere il plug-in 11 Tomcat, è necessario aggiungere il codice XML, come nell'esempio seguente:

<plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven3-plugin</artifactId>
  <version>1.10.13</version>
  <configuration>
    <container>
      <containerId>tomcat11x</containerId>
    </container>
  </configuration>
</plugin>

Nota

Per trovare un plug-in e le informazioni correlate, è possibile eseguire una ricerca nel repository centrale all'indirizzo https://search.maven.org/.

Dopo aver aggiunto il codice XML per il plug-in Tomcat, l'elemento <build> deve essere simile all'esempio seguente:

  <build>
    <finalName>MyWebApp</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.cargo</groupId>
          <artifactId>cargo-maven3-plugin</artifactId>
          <version>1.10.13</version>
          <configuration>
            <container>
              <containerId>tomcat11x</containerId>
            </container>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

Dopo aver aggiunto il plug-in Tomcat al progetto, è possibile usare il comando Maven seguente per creare il progetto, per avviare il server Tomcat e testare l'app Web:

mvn package cargo:run

Questo comando compila l'app, avvia un server Tomcat sulla porta predefinita 8080 e carica il server Tomcat. Per caricare l'app Web, passare a http://localhost:8080/MyWebApp (MyWebApp è specificato nell'elemento <finalName> in pom.xml).

Quando si carica l'app Web, viene visualizzata la pagina index.jsp predefinita dalla cartella src\webapp del progetto.

Nell'esercizio successivo verrà creata un'app Web Java usando Maven.