JSF 2 + Maven + Jetty. Подготовка

С момента последней публикации о JSF 2 вышла новая версия — JSF 2.3.0. Это знаковое событие мотивировало на написание статьи. В этой части мы подготовим и запустим базовое приложение на JavaServer Faces.

Подготовка


Создаем новый проект:

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 удален намеренно.

Продолжение следует…

Средняя зарплата в IT

110 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 8 477 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 10

    +4

    И зачем ещё один бесполезный hello world на хабре? Их в сети сотни. Jetty в заголовке, но ничего специфичного, что не позволяет поменять его на Apache Tomcat/TomEE, WildFly, GlassFish нет. Никаких фич, специфичных для faces 2.3 нет; область применимости, плюсы-минусы jsf — отсутствуют.


    Зачем этот, извиняюсь, "материал"? Или это повторная попытка хабрасуицида?

      0
      Поддерживаю Вас. Статья «ниочем».
        0
        Это «кукла» с которой будет 2-я часть.
        Jetty, ибо:
        1. просто пользовать в maven
        2. jetty-runner доставляет
        3. «Я так вижу!»

        Специфика работы с Jetty будет во 2-ой части, когда буду впиливать CDI (Weld).
        Там же расскажу почему Weld стал нужен в JSF с 2.3.0.
        Не все сразу! :-)
          0
          Jetty, ибо:
          1. просто пользовать в maven
          2. jetty-runner доставляет
          3. «Я так вижу!»

          Ситуация с tomcat'ом и wildfly (+ ещё wildfly swarm довольно интересен) на том же уровне. Плагины иначе называются, разве что.


          Специфика работы с Jetty будет во 2-ой части, когда буду впиливать CDI (Weld).
          Там же расскажу почему Weld стал нужен в JSF с 2.3.0.

          Там прям особая специфика в регистрации listener'а? В embedded jetty чуток сложнее (если использовать совместно с resteasy, как минимум), но это заморочки самого resteasy.


          В общем, напишите статью, а не сотый туториал "как вписать зависимость в pom.xml" или "как указать listener в web.xml"

            0
            Версия tomcat-плагина в https://mvnrepository.com/ от 2013г. Смутило.
            Wildfly наверняка хорош, но у меня к нему предвзятое отношение как к JEE AppServer-у, в то время как Jetty — просто легкий контейнер сервлетов.
            Тут стоит сказать что готовый проект я стараюсь уместить в ~128M оперативки с последующим запуском на Orange PI 2, но это исключительно мой фетиш и к теме «Подготовка» никакого отношения не имеет.
            Задача статьи:
            1. Подготовить «рыбу» для использования в след. частях что-бы не возвращаться к вопросу «а как проект создать?».
            2. Учитывая «старость» статей по JSF — показать как создать проект в 2017. Т.к. базовая конфигурация проекта изменилась со времен прошлых публикаций.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            PHP? ;-)
            • НЛО прилетело и опубликовало эту надпись здесь
          0
          Краткость сестра ленивых.
          org.glassfish
          Сказали бы хоть, чего хорошего от Jetty.
            0
            И это всё? ждал чуть боольшего от этой статьи

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое