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

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

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

    *.jsf является лишь одним из широко используемых шаблонов URL- FacesServlet отображения FacesServlet в web.xml . Другими являются *.faces и /faces/* , но они вернулись в эпоху JSF 1.0 / 1.1. Все они не представляют собой конкретное расширение файла / путь, а просто виртуальное расширение / путь к файлу и должны указываться в URL-адресах только так: http://example.com/contextname/page.jsf . Если вы знакомы с базовыми сервлетами , вы должны знать, что 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 является то, что *.xhtml пользователь не сможет увидеть исходный исходный код JSF всякий раз, когда enduser целенаправленно изменяет расширение URL в адресной строке браузера, например, с .jsf на .xhtml . Невозможно использовать *.jsp качестве шаблона URL-адреса, потому что таким образом встроенный JspServlet , который уже использует этот шаблон URL, будет переопределен, а FacesServlet больше не сможет FacesServlet JSP.

    Смотрите также:

    • В чем разница между JSF, Servlet и JSP?
    • Почему Facelets предпочтительнее JSP в качестве языка определения вида из JSF2.0 и далее?
    • JSF Facelets: Иногда я вижу URL-адрес .jsf и иногда .xhtml. Зачем?

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

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

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

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

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

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

       faces-servlet-name  /faces/*  

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

       faces-servlet-name  *.faces  

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

    Давайте будем гением компьютера.