С момента последней публикации о JSF 2 вышла новая версия — JSF 2.3.0. Это знаковое событие мотивировало на написание статьи. В этой части мы подготовим и запустим базовое приложение на JavaServer Faces.
Создаем новый проект:
Переходим в папку habr. Удаляем содержимое папок ./src/main/java и ./src/test/java. Приводим ./pom.xml к следующему виду:
Создаем папки ./src/main/webapp и ./src/main/webapp/WEB-INF.
В папке ./src/main/webapp/WEB-INF создаем файл web.xml:
В папке ./src/main/webapp создаем файл index.xhtml:
Запускаем:
Проверяем:
Продолжение следует…
Подготовка
Создаем новый проект:
mvn archetype:generate -DinteractiveMode=false -DgroupId=lan.net -DartifactId=habr
Переходим в папку habr. Удаляем содержимое папок ./src/main/java и ./src/test/java. Приводим ./pom.xml к следующему виду:
<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>
<!-- Меняем jar на war -->
<packaging>war</packaging>
<groupId>lan.net</groupId>
<artifactId>habr</artifactId>
<version>1.0-SNAPSHOT</version>
<name>habr</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- Определяем API реализованные Jetty. -->
<!-- http://www.eclipse.org/jetty/documentation/current/what-jetty-version.html -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- Реализация JavaServer Faces 2.3.0 -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Плагин для запуска проекта. -->
<!-- http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.5.v20170502</version>
</plugin>
</plugins>
</build>
</project>
Создаем папки ./src/main/webapp и ./src/main/webapp/WEB-INF.
В папке ./src/main/webapp/WEB-INF создаем файл web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_1.xsd"
version="3.1">
<!-- Очевидно. -->
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
В папке ./src/main/webapp создаем файл index.xhtml:
<?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">
<h:head>
<title>Title</title>
</h:head>
<h:body>
<p>Session ID: <h:outputText value="#{session.id}"/></p>
</h:body>
</html>
Запускаем:
mvn jetty:run
Проверяем:
http://127.0.0.1:8080/
Послесловие
- На странице отображается ID текущей сессии.
- Проект не содержит в себе кода на Java.
- jUnit удален намеренно.
Продолжение следует…
Поделиться с друзьями
grossws
И зачем ещё один бесполезный hello world на хабре? Их в сети сотни. Jetty в заголовке, но ничего специфичного, что не позволяет поменять его на Apache Tomcat/TomEE, WildFly, GlassFish нет. Никаких фич, специфичных для faces 2.3 нет; область применимости, плюсы-минусы jsf — отсутствуют.
Зачем этот, извиняюсь, "материал"? Или это повторная попытка хабрасуицида?
krupt
Поддерживаю Вас. Статья «ниочем».
metej
Это «кукла» с которой будет 2-я часть.
Jetty, ибо:
Специфика работы с Jetty будет во 2-ой части, когда буду впиливать CDI (Weld).
Там же расскажу почему Weld стал нужен в JSF с 2.3.0.
Не все сразу! :-)
grossws
Ситуация с tomcat'ом и wildfly (+ ещё wildfly swarm довольно интересен) на том же уровне. Плагины иначе называются, разве что.
Там прям особая специфика в регистрации listener'а? В embedded jetty чуток сложнее (если использовать совместно с resteasy, как минимум), но это заморочки самого resteasy.
В общем, напишите статью, а не сотый туториал "как вписать зависимость в pom.xml" или "как указать listener в web.xml"
metej
Версия tomcat-плагина в https://mvnrepository.com/ от 2013г. Смутило.
Wildfly наверняка хорош, но у меня к нему предвзятое отношение как к JEE AppServer-у, в то время как Jetty — просто легкий контейнер сервлетов.
Тут стоит сказать что готовый проект я стараюсь уместить в ~128M оперативки с последующим запуском на Orange PI 2, но это исключительно мой фетиш и к теме «Подготовка» никакого отношения не имеет.
Задача статьи:
izzholtik
А какую платформу лучше выбрать, например, для небольшого велосипедного форума на десяток страниц?
metej
PHP? ;-)
izzholtik
Ну фыр теперь.