В чем разница между созданием страниц JSF с расширением .jsp или .xhtml или .jsf

Я увидел несколько примеров создания страниц JSF с расширением .jsp, другие примеры, создающие их с расширением .xhtml, а в других примерах выберите .jsf. Я просто хотел бы знать, какая разница между вышеуказанными расширениями при работе с страницами JSF и как выбрать соответствующее расширение?

Ответ 1

JSP - это технология старого вида и широко используется в сочетании с JSF 1.x. Лицевые стороны (некоторые люди overgeneralized как XHTML) являются преемником JSP и представлены как технология просмотра по умолчанию JSF 2.x в конце 2009 года. Когда вы видели JSP, возможно, вы читали устаревшие книги, учебные пособия или ресурсы, ориентированные на JSF 1.x. Обычно вы игнорируете их при разработке с помощью JSF 2.x и направляетесь к ресурсам, ориентированным на JSF 2.x, иначе вы можете столкнуться с путаницей, потому что в JSF 2.x на Facelets все сделано по-разному.

*.jsf - это только один из широко используемых шаблонов URL-адреса отображения FacesServlet в web.xml. Другими являются *.faces и /faces/*, но они вернулись в возрасте JSF 1.0/1.1. Все они не представляют собой конкретное расширение файла/путь, а просто виртуальное расширение/путь к файлу и должны быть указаны в URL-адресах только так http://example.com/contextname/page.jsf. Если вы знакомы с базовым Servlets, то вы должны знать, что servletcontainer вызовет сервлет, когда URL-адрес запроса соответствует шаблону URL сервлета. Поэтому, когда URL-адрес запроса соответствует *.jsf, тогда будет вызван FacesServlet. При использовании JSP это фактически выполнит page.jsp. При использовании Facelets это фактически скомпилирует page.xhtml.

Так как JSF 2.x вы также можете использовать *.xhtml как шаблон URL. Таким образом, вам не нужно путаться при указании URL-адресов. Использование *.xhtml в качестве шаблона URL было невозможно в JSF 1.x с Facelets 1.x, потому что FacesServlet затем выполнялся в бесконечном цикле, который сам вызывал себя каждый раз. Дополнительным преимуществом использования *.xhtml является то, что конечный пользователь не сможет увидеть исходный исходный код JSF, когда конечный пользователь целенаправленно изменяет расширение URL в адресной строке браузера, например, с .jsf до .xhtml. Использовать *.jsp в качестве шаблона URL нельзя, так как этот контейнер, встроенный JspServlet, который уже использует этот шаблон URL, будет переопределен, а затем FacesServlet больше не сможет загружать JSP.

См. также:

Ответ 2

.jsp файлы обычно используются для представлений JSF, определенных с использованием страниц JavaServer. .xhtml файлы обычно используются для представлений JSF, определенных с помощью Facelets.

Это можно изменить с помощью конфигурации (например, см. параметры конфигурации javax.faces.DEFAULT_SUFFIX и javax.faces.FACELETS_SUFFIX.)

Другие сопоставления расширений (*.jsf, *.faces), как правило, используются для обработки запросов через FacesServlet. Это логическое отображение в представление, которое будет обрабатывать среда выполнения JSF. Как обрабатываются сопоставления, определяется в web.xml (это не нужно делать с помощью расширений, часто используется сопоставление /faces/*.

Из спецификации:

Отображение сервлетов

Все запросы к веб-приложению отображаются на определенный сервлет основанный на сопоставлении шаблона URL (как определено в Java Servlet Спецификация) в отношении части URL-адреса запроса после контекстный путь, который выбрал это веб-приложение. JSF реализации должны поддерживать веб-приложение, определяющее <servlet-mapping>, который отображает любой действительный шаблон url для FacesServlet. Может использоваться префикс или расширение. Когда используешь рекомендуется использовать следующее сопоставление, но не требуется:

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

При использовании карт расширения рекомендуется использовать следующее сопоставление, но не требуется:

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>

В дополнение к FacesServlet реализация JSF может поддерживать другие способы вызова жизненного цикла обработки запросов JavaServer Faces, но приложения, которые полагаются на эти механизмы, не будут переносимыми.