JSF и библиотеки Unclarity

После некоторого времени, проведенного с сервлетами и JSP, сейчас я пытаюсь что-то узнать о JSF. Я изучил основы, сделал пару простых примеров, имею базовое представление о "рабочем процессе", но я все еще не могу понять, что с javax.faces.webapp.FacesServlet.

<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>*.jsf</url-pattern>
  </servlet-mapping>

Я знаю, что "Faces Servlet" - это просто "внутреннее" имя только для XML и он связывается с классом, в данном случае: javax.faces.webapp.FacesServlet. Но где же этот класс? Я использую Eclipse, создал новый динамический проект, GlassFish 4.0 в качестве сервера, JSF 2.0 в качестве конфигурации (не выбрал библиотеку), и я не импортировал ни один jar. Как это может работать? И когда я пытаюсь запустить то же самое с JBoss, я должен импортировать файл javax.faces-2.2.2.jar.

Хорошо, библиотека может быть уже включена в GlassFish, так как она работает, но... возникнут ли у меня проблемы, если я попытаюсь развернуть свое приложение на другом сервере? Как JBoss или Websphere.

В двух словах: каковы предпосылки при работе с технологией JSF:)

Спасибо.

1 ответ

Решение

javax.faces.webapp.FacesServlet это класс, который реализует Servlet интерфейс. Чтобы быть признанным в вашем приложении, вы должны добавить его в web.xml как <servlet>, Это в основном сделано в этой конфигурации:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Теперь мы можем ссылаться на этот класс в файле web.xml, используя имя сервлета Faces. Следующее, что нужно сделать, это определить URL, который будет обрабатываться этим сервлетом. Это сделано в этой конфигурации:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Таким образом, любой запрос GET или POST к этому серверу приложений, заканчивающийся суффиксом jsf, будет обрабатываться сервлетом Faces. Вы можете использовать другие шаблоны URL для отображения сервлета. Это лучше объяснить здесь: JSF Facelets: иногда я вижу URL-адрес.jsf, а иногда и.xhtml. Зачем?

возникнут ли у меня проблемы, если я попытаюсь развернуть свое приложение на другом сервере? Как JBoss или Websphere?

Если сервер приложений является сервером, совместимым с Java EE 5, то у вас будет доступ к этому сервлету с помощью реализации Mojarra в форме JSF 1.2. Для серверов, совместимых с Java EE 6, это будет в реализации Mojarra для JSF 2.x (ознакомьтесь с примечаниями сервера приложений, чтобы узнать точную версию). В настоящее время со GlassFish 4 вы получаете Mojarra для JSF 2.2.

Если сервер приложений не является сервером, совместимым с Java EE, например Tomcat, необходимо вручную добавить библиотеки в папку WEB-INF/lib вашего веб-приложения. Какие библиотеки добавить? В зависимости от версии JSF и ее требований (читайте дальше).

Каковы предпосылки при работе с технологией JSF?

Это описано в вики Stackru JSF. Взятые оттуда:

Минимальные требования

  • Для JSF 1.0 и 1.1 требуется минимум Servlet 2.4 / JSP 2.0 и Java 1.4.
  • JSF 1.2 работает на Servlet 2.4, но требует как минимум JSP/EL 2.1, который идет рука об руку с Servlet 2.5, так что в конце концов он требует Servlet 2.5. Если вы замените JSP 2.1 на Facelets 1.x в качестве технологии просмотра по умолчанию, то вы можете использовать JSF 1.2 в Servlet 2.4. Требуется минимум Java 1.5.
  • JSF 2.0, который использует по умолчанию Facelets 2.x, требует минимум EL 2.1, который идет рука об руку с Servlet 2.5, поэтому он требует после всего Servlet 2.5. Если вы предоставляете свой собственный EL 2.1 API/impl, то теоретически вы можете запустить JSF 2.0 на Servlet 2.4. Требуется минимум Java 1.5.
  • JSF 2.1 использует некоторые специфические функции Servlet 3.0, но обратно совместима с Servlet 2.5. Эти функции Servlet 3.0 не являются обязательными.
  • JSF 2.2 требует как минимум Servlet 3.0 из-за нового компонента загрузки файлов, который внутренне использует стандартный API Servlet 3.0 без необходимости использования сторонних библиотек. Требуется минимум Java 1.6.

Примерами контейнеров Servlet 2.4 являются Tomcat 5.5.x, JBoss AS 4.x и Sun Java Application Server.

Примерами контейнеров Servlet 2.5 являются Tomcat 6.0.x, JBoss AS 5.x и GlassFish 2.x.

Примерами контейнеров Servlet 3.0 являются Tomcat 7.0.x, JBoss AS 6.x и 7.x и GlassFish 3.x.

Примерами контейнеров Servlet 3.1 являются Tomcat 8.0.x, WildFly 8.x и GlassFish 4.x.

Другие вопросы по тегам