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 @RequestScoped public 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 . |