Страницы JavaServer, JavaServer Faces и язык выражений
В этой статье я собираюсь взглянуть на JavaServer Pages (JSP) и Expression Language (EL), а затем связать его с JavaServer Faces (JSF). Я расскажу о том, как получить доступ к объектам HTTP непосредственно в коде JSP и JSF, и вы увидите несколько примеров синтаксического различия между ними.
JSP — устаревшая технология
JSP — это устаревшая технология веб-программирования Java EE, выпущенная в первой версии J2EE в 1999 году . Позже он был заменен в 2003 году на JSF, но его развитие продолжилось с последней версией 2.3, выпущенной в Java EE 7, поскольку до сих пор она не устарела.
JSF является предпочтительным
Несмотря на то, что JSF опередил JSP в качестве предпочтительного варианта, все еще есть много приложений, использующих JSP, и весьма вероятно, что вы столкнетесь с такими приложениями в течение нескольких лет, так что стоит оценить эту технологию.
Динамическое Java веб-приложение
JSP — это технология на стороне сервера, которая позволяет разработчику создавать динамическое веб-приложение на Java. JSP можно рассматривать как расширение технологии сервлетов, поскольку он предоставляет функции для простого создания пользовательских представлений. JavaServer Pages состоит из HTML-кода, но он позволяет включать Java-код для динамического создания контента. Поскольку веб-приложения содержат множество пользовательских экранов, JSP часто используются в веб-приложениях.
Преодолеть разрыв между Java и HTML
Для преодоления разрыва между кодом Java и HTML в JSP предусмотрены дополнительные функции, такие как теги JSP , язык выражений и пользовательские теги . Это облегчает понимание и помогает веб-разработчику быстро разрабатывать страницы JSP. Однако большую часть времени мы используем JSP только для генерации представлений, и вся бизнес-логика присутствует в коде сервлета, Enterprise Java Beans или классах моделей.
Это гораздо менее сложный язык рендеринга представлений по сравнению с JSF и не пользуется преимуществами компонентов. Тем не менее, разделение логики представления и бизнес-логики не всегда остается таким четким. Сценарии JSP позволяют писать код Java непосредственно в логике представления. Это омрачает разделение.
Встроенная Java
Такой код Java вводится непосредственно на странице JSP между ракетой и процентом <%…%>
Здесь мы используем код Java для доступа к объекту HTTPServerRequest , чтобы получить параметр запроса с именем id и паролем .
Смешивать эту логику с технологиями представления — плохая практика. Вот почему современные приложения Java EE предпочитают не использовать JSP, а вместо этого используют более структурированный язык JSF на основе компонентов.
Неявные объекты JSP
Неявные объекты JSP создаются контейнером сервлетов при переводе JSP в сервлеты. Они в основном связаны с объектами и областями HTTP. Мы можем использовать неявные объекты в JSP непосредственно в скриптлетах, как показано в приведенном выше фрагменте кода, для доступа к значениям, связанным с текущей областью действия или объектами HTTP.
В следующем фрагменте кода мы ссылаемся на объекты HTTP-запроса, чтобы получить путь к контексту.
1
|
<%=request.contextPath %> |
Примерами других неявных объектов JSP являются запрос , ответ , pageContext и приложение .
Чтобы еще больше усложнить ситуацию, язык выражений имеет свои собственные неявные объекты, имена которых аналогичны тем, которые доступны в JSP, и относятся к тем же объектам и областям HTTP.
1
|
${request.contextPath} |
Примеры других неявных объектов EL: request , requestScoped , pageContext , applicationScoped
Здесь мы получаем путь контекста из объекта HTTP-запроса, как мы это делали в примере с JSP ранее. Обратите внимание, что некоторые объекты названы по-разному и используется другой синтаксис.
Использование EL в JSP и JSF
Давайте немного расширим тему и посмотрим, как мы используем язык выражений в JSP и JSF.
В следующем фрагменте кода показано использование EL в JSP:
- Неявные объекты: $ {request.contextPath}
- Свойство бина : $ {book.title}
и следующий фрагмент кода показывает, что использование EL в JSF:
- Неявные объекты: # {request.contextPath}
- Свойство бина : # {book.title}
В обоих случаях ссылка на объект называется одинаковой и ссылается на один и тот же объект. Единственным отличием является синтаксис, используемый для ссылки на экземпляр. JSP использует знак доллара, а JSF использует хэш . На имя компонента ссылается, используя имя класса с первой буквой в нижнем регистре (если только другое имя не было явно определено в названной аннотации).
И, наконец, давайте рассмотрим лишь немного синтаксиса, который мы используем в языке выражений.
- Логические операторы
- [] , () , — , <=> , eq ne , || и более
- и , не , instanceof , правда , мод и многое другое
- $ {not empty book.title}
Как и следовало ожидать, это очень знакомо. У нас есть стандартные логические операторы, которые проверяют равенство и выполняют математические операции. Кроме того, нам дается некоторый синтаксический сахар над сложными операциями, такими как непустая операция, которую мы видим здесь.
Дальнейшее чтение
Как насчет того, чтобы немного узнать о внедрении контекстов и зависимостей (CDI) и корпоративных Java-бинов (EJB). Это две основные технологии.
Недавно я опубликовал мини-серию блогов, посвященных JAX-RS . Они обсуждают, как управлять ошибками проверки bean-компонентов , работать с Потребителями и Производителями и как создавать Ресурсные объекты JAX-RS .
Есть две серии глубоких погружений по темам JAX-RS:
- Что такое аннотации JAX-RS? Глубокое погружение, рассматривающее аннотации, наиболее часто используемые при разработке конечных точек REST.
- Для чего используется аннотация @Context? Глубокое погружение во множество применений аннотации @Context.
Что дальше?
Если вы новичок в Java EE, вам может быть непросто разобраться во всех API-интерфейсах от корпоративной экосистемы. Вот почему я написал и записал видео-учебный курс Learning Java Enterprise Edition . Этот двухчасовой курс знакомит вас со всеми наиболее важными API Java EE. Имея множество демонстраций, примеров кода и практических заданий о том, как программировать с помощью Enterprise Java, вы сможете в совершенстве говорить о том, как стать разработчиком Java EE.
Развивайте свои знания
Если вы хотите узнать больше, есть курсы, которые углубляются в каждый из API. Существует курс по API JAX-RS, который поможет вам расширить свои знания, научившись создавать конечные точки RESTful . Существует курс по API WebSocket, в котором вы можете научиться разрабатывать приложение для чата, а также курс по JSON, где вы узнаете, как освоить курс API JSON-Processing . На горизонте много курсов, так почему бы не начать сейчас и дать толчок своей карьере в Java EE.
Ссылка: | JSP, JSF и EL Введение от нашего партнера JCG Алекса Тедома в блоге Read Learn Code . |