Неспособность JSF и библиотек

После некоторого времени, проведенного с сервлетами и 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, создал новый Dynamic Project, GlassFish 4.0 в качестве сервера, JSF 2.0 в качестве конфигурации (не выбрал никакой библиотеки), и я также не импортировал какую-либо банку. Как он может работать? И когда я пытаюсь запустить одно и то же с 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 Servlet. Вы можете использовать другие шаблоны 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?

Это описано в fooobar.com/tags/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.