Я увидел несколько примеров создания страниц JSF с расширением .jsp, другие примеры, создающие их с расширением .xhtml, а в других примерах выберите .jsf.
Я просто хотел бы знать, какая разница между вышеуказанными расширениями при работе с страницами JSF и как выбрать соответствующее расширение?
В чем разница между созданием страниц JSF с расширением .jsp или .xhtml или .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, но приложения, которые полагаются на эти механизмы, не будут переносимыми.
