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.