Alıştırma - Tomcat üzerinde bir JavaServer Faces web uygulaması oluşturma
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 web uygulamanızı yerel Tomcat ortamınızda başarıyla çalıştırdınız.