Alıştırma - Tomcat üzerinde bir JavaServer Faces web uygulaması oluşturma

Tamamlandı

Form gönderimlerini işleyebilen bir JavaServer Faces (JSF) web uygulaması oluşturmanız istendi. Bir web uygulaması oluşturacak ve bunu yerel ortamdaki Tomcat sunucusuna dağıtacaksınız.

Tomcat üzerinde basit bir JSF web uygulaması oluşturma

Bu alıştırmada Java web uygulamanız için bir Maven projesi oluşturacaksınız. Projeyi oluşturduktan sonra tamamlamanız gereken üç yapılandırma olacak. Birincisi, pom.xml dosyasına bağımlılık kitaplıklarını eklemektir. İkincisi, Bağlam ve Bağımlılık Ekleme (CDI) kullanmak için bir CDI yapılandırma dosyası (beans.xml) oluşturmaktır. Üçüncüsü ise web.xml dosyasında JSF'yi yapılandırmaktır. Yapılandırmaları tamamladıktan sonra JSF web sayfasını ve sunucu tarafındaki arka uç işlemleri için backing bean'i oluşturabilirsiniz. Son olarak bunu yerel Tomcat ortamında değerlendireceksiniz.

Maven projesi oluşturma

Aşağıdaki Maven archetype komutunu yürütün. Bu komut, Java web uygulamanız için bir Maven projesi oluşturur.

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

Aşağıdaki çıkışı görürsünüz:

[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] ------------------------------------------------------------------------

Artık aşağıdaki dosyaları ve dizinleri kullanabilirsiniz.

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

Maven pom.xml dosyasını değiştirme

JSF kitaplıklarını kullanmak için pom.xml dosyasına aşağıdaki bağımlılık kitaplıklarını eklemeniz gerekir.

pom.xml dosyanızın içeriğini aşağıdaki kodla değiştirin:

<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>

Java 8 yerine Java SE 11 kullanmak isterseniz aşağıdaki pom.xml girişini değiştirin:

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

Bağlam ve Bağımlılık Ekleme (CDI) özelliğini etkinleştirme

Şimdi web uygulamanız için CDI özelliğini etkinleştireceksiniz. src/main/WEB-INF dizininde bir beans.xml dosyası oluşturun ve aşağıdaki içeriği ekleyin:

<?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>

JSF'yi etkinleştirme

Ardından xhtml uzantısına sahip tüm dosyaların JSF Facelets olarak tanınması için WEB-INF dizinindeki web.xml dosyasında aşağıdaki değişiklikleri yapın.

<?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>

index.jsp dosyasının adını değiştirme

JSF kullanmak için gerekli ortam ayarlarını yaptığınıza göre JSF sayfasını oluşturmaya başlayabilirsiniz. JSF web sayfaları, yukarıdaki örnekte web.xml dosyasıyla belirtildiği gibi JSP yerine XHTML dosya biçiminde yazılır. Bu nedenle proje oluşturulduğunda otomatik olarak oluşturulan index.jsp dosyasının adını index.xhtml olarak değiştirin.

mv index.jsp index.xhtml

JSF için basit bir web sayfası oluşturma

index.xhtml dosyasının tüm içeriğini silip aşağıdaki kodu kopyalayın:

<?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>

JSF backing bean'i oluşturma

Ardından sunucu tarafındaki arka uç işlemlerini gerçekleştirecek backing bean'i oluşturun. Java paketiniz için, dizinin altında src/main yedekleme çekirdeğini oluşturmak için kullanacağınız yeni bir dizin oluşturun.

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

Ardından IndexController.java adlı bir dosya oluşturun ve aşağıdaki JSF backing bean kodunu yapıştırın:

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++;
    }
}

Bu son eylemle birlikte programınız tamamlanmış olur. Program uygulandıktan sonraki dizin yapısı aşağıdaki gibidir:

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

Yerel Tomcat ortamında çalıştırma

Yerel ortamınıza Tomcat 9.0.x yüklediyseniz bir sonraki adıma geçin. Aksi takdirde bir sonraki bölüme geçin.

Kaynak kodu derleyin ve yerel Tomcat ortamında çalıştırın. Aşağıdaki kodu yürütün.

Java projesini derleme ve paketleme

Kodu derlemek için aşağıdaki komutu yürütür:

mvn clean package

Yapıtı Tomcat'in dağıtım dizinine kopyalama

Yapıt savaş dosyasını Tomcat dizinine kopyala"

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

Tomcat sunucusunu başlatma

Tomcat sunucusunu başlatın.

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

Tomcat'i başlattıktan sonra http://localhost:8080/azure-javaweb-app/ adresine giderseniz aşağıdaki ekranı görürsünüz:

JSF HelloWorld Page.

JSF web uygulamanızı yerel Tomcat ortamınızda başarıyla çalıştırdınız.