MVC 1.0 — это основанная на действии веб-инфраструктура Model-View-Controller, которая станет частью будущей Java EE 8. Она будет жить бок о бок с компонентной структурой JSF и предоставит альтернативу для создания приложений, ориентированных на HTML + javascript. с полным контролем над URL.
В этой статье кратко излагается, что нужно сделать, чтобы использовать Facelets вместо JSP по умолчанию в качестве технологии представления для инфраструктуры MVC.
Вступление
Хотя MVC является новой новой платформой, используемая в большинстве примеров технология представления по умолчанию — JSP — довольно старая и иногда громоздкая. С другой стороны, старший брат JSF уже опирается на более современные и гибкие Facelets.
К счастью, инфраструктура MVC была разработана для поддержки множества альтернативных технологий просмотра, включая Facelets.
Начиная
Хотя Java EE 8 еще не выпущена, можно использовать среду MVC уже на некоторых серверах Java EE 7, поскольку эталонная реализация спецификации MVC под названием Ozark уже почти завершена.
Сообщается, что Озарк работает с серверами приложений Glassfish 4.1.1 и Payara 4.1 . Я рекомендую запустить приложение на одном из них, в противном случае вы рискуете некоторые глюки тут и там.
До выхода Java EE 8 необходимо добавить зависимость от артефакта ozark maven с compile области видимости по умолчанию поверх API Java EE 7:
Зависимости в pom.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope></dependency><dependency> <groupId>org.glassfish.ozark</groupId> <artifactId>ozark</artifactId> <version>1.0.0-m02</version> <scope>compile</scope></dependency> |
Это все, что нужно для настройки проекта. Теперь вы готовы использовать новую инфраструктуру MVC с Java EE!
контроллер
Каркас MVC построен на основе JAX-RS и интегрируется с CDI и Bean Validation. Следовательно, MVC Controller — это ресурс JAX-RS, аннотированный @javax.mvc.annotation.Controller :
HeloController.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
@Path("/hello")@Controller@RequestScopedpublic class HelloController { @Inject private Models model; @GET public String doGet() { model.put("hello", "Hello MVC 1.0"); return "hello.xhtml"; }} |
Контроллер содержит бизнес-логику и склеивает модель с видом в результате.
Представление просто идентифицируется строкой, возвращаемой из действия контроллера. Чтобы использовать Facelets, достаточно указать путь, который будет сопоставлен с сервлетом Facelets (мы условно используем суффикс xhtml ).
Модель представлена введенным объектом Models .
Несколько вещей, чтобы отметить здесь. Во-первых, поскольку контроллер является ресурсом JAX-RS, необходимо также создать конфигурацию приложения JAX-RS — класс, расширяющий javax.ws.rs.core.Application .
Во-вторых, если вы не включите beans.xml со all режимом обнаружения bean-компонентов , вам нужно пометить свой контроллер аннотацией, определяющей область действия, например @RequestScoped , чтобы включить CDI-инъекцию Models .
модель
Модель состоит из объектов, идентифицированных ключами String , которые превращаются в переменные на странице просмотра.
Есть 2 способа определения модели. Первый — внедрить javax.mvc.Models в контроллер, который фактически является картой. Затем действие контроллера помещает объекты в внедренную модель под ключами String .
JSP и Facelets также поддерживают произвольные компоненты CDI, помеченные квалификатором @Named CDI. Таким образом, вы можете превратить любой компонент CDI в модель, просто поместив на @Named аннотацию @Named .
Посмотреть
А теперь суть этого поста — мы будем использовать грани для отображения данных в нашей модели. На самом деле, использование Facelets в качестве технологии просмотра так же просто, как и использование JSP. Требуется только правильно настроить сервлет Facelets.
Конфигурация FacesServlet в web.xml
|
1
2
3
4
5
6
7
8
9
|
<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern></servlet-mapping> |
FacesServlet должен быть сопоставлен с *.xhtml . Все xhtml страницы должны находиться в папке WEB-INF/views внутри веб-приложения, где инфраструктура MVC ищет файлы представлений.
Вот и все! Теперь вы можете начать писать страницы, используя Facelets и ссылаться на них по пути, который заканчивается в xhtml .
Пример страницы Hello Facelet:
hello.xhtml
|
01
02
03
04
05
06
07
08
09
10
11
|
<?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"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h1>#{hello}</h1> </h:body></html> |
Чтобы отобразить hello.xhtml, просто верните "hello.xhtml" из действия контроллера, и все готово.
Резюме
Начать работу с MVC-фреймворком очень легко, если вы поймете основы JAX-RS и CDI. Единственное требование — запускать ваше приложение на одном из серверов приложений, которые поддерживают эталонную реализацию Ozark. Также очень легко использовать различные технологии представления в качестве альтернативы JSP по умолчанию.
Инфраструктура MVC включает поддержку многих технологий просмотра и позволяет подключать другие технологии поверх нее. Настройка Facelets требуется только для настройки сервлета Faces в web.xml — то же самое, что вам нужно сделать при настройке JSF.
Этот пост был вдохновлен другим постом Беннет Шульц . Посетите его блог, если вы хотите узнать больше о новой платформе MVC.
| Ссылка: | MVC 1.0 в Java EE 8. Начало работы с фейслетами от нашего партнера по JCG Ондрея Михалого из блога .Lost in Coding . |