Latihan - Membuat aplikasi web JavaServer Faces di Tomcat

Selesai

Anda telah diminta untuk membuat aplikasi web JavaServer Faces (JSF) yang dapat menangani pengiriman Formulir. Anda akan membangun aplikasi web dan menyebarkannya secara lokal ke server Tomcat.

Membuat aplikasi web JSF sederhana di Tomcat

Dalam latihan ini, kita akan membuat proyek Maven untuk aplikasi web Java Anda. Setelah membuat proyek, Anda harus mengonfigurasi tiga konfigurasi. Yang pertama adalah menambahkan pustaka dependensi ke file pom.xml. Yang kedua adalah membuat file konfigurasi CDI sebagai beans.xml dengan menggunakan Contexts and Dependency Injection (CDI). Yang ketiga adalah mengonfigurasi JSF pada file web.xml. Setelah konfigurasi, kita dapat membuat halaman web JSF dan membuat kacang cadangan untuk operasi back-end sisi server. Terakhir, kami akan mengevaluasinya di lingkungan Tomcat lokal.

Membuat proyek Maven

Jalankan perintah arketipe Maven berikut. Perintah ini akan membuat proyek Maven untuk aplikasi web Java Anda.

mvn archetype:generate \
-DgroupId=com.microsoft.azure.samples \
-DartifactId=azure-javaweb-app \
-DarchetypeArtifactId=maven-archetype-webapp \
-Dversion=1.0-SNAPSHOT \
-DinteractiveMode=false

Anda akan melihat output berikut:

[INFO] Parameter: package, Value: com.microsoft.azure.samples
[INFO] Parameter: groupId, Value: com.microsoft.azure.samples
[INFO] Parameter: artifactId, Value: azure-javaweb-app
[INFO] Parameter: packageName, Value: com.microsoft.azure.samples
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /private/tmp/TMP/azure-javaweb-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.416 s
[INFO] Finished at: 2020-11-02T11:12:58+09:00
[INFO] ------------------------------------------------------------------------

File dan direktori berikut sekarang tersedia.

├── pom.xml
└── src
 └── main
     ├── resources
     └── webapp
         ├── WEB-INF
         │   └── web.xml
         └── index.jsp

Mengubah file pom.xml Maven

Untuk menggunakan pustaka JSF, kita perlu menambahkan pustaka dependensi berikut ke dalam pom.xml.

Ganti isi pom.xml dengan kode berikut:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.azure.samples</groupId>
<artifactId>azure-javaweb-app</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>azure-javaweb-app Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
 <maven.compiler.source>8</maven.compiler.source>
 <maven.compiler.target>8</maven.compiler.target>
 <failOnMissingWebXml>false</failOnMissingWebXml>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
 <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.1</version>
   <scope>provided</scope>
 </dependency>
 <dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.faces</artifactId>
   <version>2.4.0</version>
 </dependency>
 <dependency>
   <groupId>org.primefaces</groupId>
   <artifactId>primefaces</artifactId>
   <version>8.0</version>
 </dependency>
 <dependency>
   <groupId>org.jboss.weld.servlet</groupId>
   <artifactId>weld-servlet</artifactId>
   <version>2.4.8.Final</version>
 </dependency>
 <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.12</version>
   <scope>provided</scope>
 </dependency>
 <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
 </dependency>
 <dependency>
   <groupId>org.mockito</groupId>
   <artifactId>mockito-core</artifactId>
   <version>2.23.0</version>
   <scope>test</scope>
 </dependency>
</dependencies>
<build>
 <finalName>azure-javaweb-app</finalName>
</build>
</project>

Jika Anda ingin menggunakan Java SE 11 alih-alih Java 8, ubah entri pom.xml berikut:

 <maven.compiler.source>11</maven.compiler.source>
 <maven.compiler.target>11</maven.compiler.target>

Aktifkan Konteks dan Injeksi Dependensi

Selanjutnya, buat CDI tersedia untuk aplikasi web Anda. Buat file beans.xml di bawah direktori src/main/WEB-INF, dan jelaskan konten berikut:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>

Aktifkan JSF

Selanjutnya, untuk mengenali semua file dengan ekstensi xhtml sebagai JSF Facelets, buat perubahan berikut ke web.xml di bawah direktori WEB-INF.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">

<servlet>
 <servlet-name>Faces Servlet</servlet-name>
 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
 <param-name>primefaces.THEME</param-name>
 <param-value>nova-light</param-value>
</context-param>

<servlet-mapping>
 <servlet-name>Faces Servlet</servlet-name>
 <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<welcome-file-list>
 <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>

Mengubah nama index.jsp

Sekarang setelah pengaturan lingkungan untuk menjalankan JSF telah selesai, saatnya untuk membuat halaman JSF. Halaman web JSF ditulis dalam format file XHTML alih-alih JSP, seperti yang diatur dalam contoh web.xml sebelumnya. Jadi, ubah nama file index.jsp yang dihasilkan secara otomatis saat proyek dibuat menjadi index.xhtml.

mv index.jsp index.xhtml

Membuat halaman web dasar untuk JSF

Hapus semua konten yang dijelaskan dalam index.xhtml dan salin kode berikut:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p="http://primefaces.org/ui">
<h:head>
 <title>Input Value Counter Sample</title>
</h:head>
<h:body>
 <h:form>
     <p:outputLabel value="Basic" /><br />
     <p:inputText value="#{indexcontroller.inputValue}" /><br />
     <p:commandButton update="ajaxUpdateText" value="Submit" action="#{indexcontroller.submitButtonAction()}" />
     <br />
     <p:outputLabel id="ajaxUpdateText" value="Input Value: #{indexcontroller.inputValue}" /><br />
 </h:form>
</h:body>
</html>

Membuat bean cadangan JSF

Selanjutnya, buat bean backing untuk mengimplementasikan pemrosesan back-end sisi server. Buat direktori baru untuk paket Java Anda, yang akan Anda gunakan untuk membuat kacang cadangan di src/main bawah direktori.

mkdir src/main/java
mkdir src/main/java/com
mkdir src/main/java/com/microsoft
mkdir src/main/java/com/microsoft/azure
mkdir src/main/java/com/microsoft/azure/samples

Kemudian buat file IndexController.java, dan salin dan tempel kode kacang cadangan JSF yang mengikuti:

package com.microsoft.azure.samples;
import java.io.Serializable;

import javax.faces.view.ViewScoped;
import javax.inject.Named;
import lombok.Getter;
import lombok.Setter;

@Named("indexcontroller")
@ViewScoped
public class IndexController implements Serializable{

    private static final long serialVersionUID = 8485377386286855408L;

    @Setter @Getter
    private String inputValue;

    private int counter;

    public void submitButtonAction(){
        inputValue = inputValue + " : " + counter;
        counter++;
    }
}

Tindakan terakhir ini menyelesaikan program Anda. Struktur direktori setelah mengimplementasikan program adalah sebagai berikut:

├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── microsoft
        │           └── azure
        │               └── samples
        │                   └── IndexController.java
        ├── resources
        └── webapp
            ├── WEB-INF
            │   ├── beans.xml
            │   └── web.xml
            └── index.xhtml

Jalankan di lingkungan Tomcat lokal

Jika Anda menginstal Tomcat 9.0.x di lingkungan lokal Anda, lanjutkan ke langkah berikutnya. Jika tidak, lanjutkan ke bagian berikutnya.

Kompilasi kode sumber dan jalankan di lingkungan Tomcat yang diinstal secara lokal. Jalankan perintah berikut.

Kompilasi dan paket proyek Java

Jalankan perintah berikut untuk mengkompilasi kode:

mvn clean package

Salin artefak ke direktori penyebaran di Tomcat

Salin file perang artefak ke direktori di Tomcat"

cp target/azure-javaweb-app.war /$INSTALL_DIR/apache-tomcat-9.0.39/webapps/

Memulai server Tomcat

Memulai server Tomcat.

$INSTALL_DIR/apache-tomcat-9.0.39/bin/startup.sh

Setelah memulai Tomcat, telusuri http://localhost:8080/azure-javaweb-app/ dan Anda akan melihat layar berikut:

JSF HelloWorld Page.

Anda berhasil menjalankan aplikasi web JSF di lingkungan Tomcat lokal Anda.