Иногда я вижу URL-адрес JSF * .jsf, иногда * .xhtml, а иногда / Faces / *.Зачем? - PullRequest
55 голосов
/ 09 июня 2010

Я пытался изучить JSF, и иногда я вижу URL-адрес *.jsf, а иногда *.xhtml или /faces/*. Может кто-нибудь заполнить мои знания, пожалуйста? Когда я создаю JSF с помощью Facelet, расширение файла .xhtml, так откуда же взято .jsf расширение URL?

1 Ответ

97 голосов
/ 09 июня 2010

Расширение .jsf - это то, где FacesServlet находится в период JSF 1.2, часто отображаемый в web.xml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Расширение .xhtml имеет файл фактический Facelets, который вы физически поместили в веб-контент вашего веб-приложения, например Webapp/WebContent/page.xhtml.

Если вы вызываете эту страницу с расширением .jsf, например, http://localhost:8080/webapp/page.jsf, тогда будет вызываться FacesServlet, найдите файл page.xhtml и выполните синтаксический анализ / визуализацию его компонентов JSF.Если FacesServlet не вызывается, тогда конечный пользователь получит необработанный исходный код XHTML (который можно увидеть, нажав правую кнопку мыши, Просмотреть исходный код ).

Иногда *.faces расширение или /faces/* папок используется.Но это было в далёком возрасте JSF 1.0 / 1.1.Вы можете выбирать и использовать любое отображение, которое хотите, чтобы FacesServlet слушал, даже если это ничего не говорит *.xyz.Сама настоящая страница всегда должна иметь расширение .xhtml, но это настраивается следующим <context-param> в web.xml:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xml</param-value>
</context-param>

Это изменит FacesServlet для определения page.xml instadиз (по умолчанию) page.xhtml.

В последнее время с JSF / Facelets 2.0 использовалось отображение *.xhtml.В JSF / Facelets 1.x было невозможно использовать то же расширение сопоставления, что и физический файл.Это привело бы к бесконечному циклу.Но начиная с JSF / Facelets 2.0 это возможно, и это позволяет вам вызывать страницу по http://localhost:8080/webapp/page.xhtml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Таким образом, вам не нужно настраивать некоторые ограничения безопасности, чтобы скрывать необработанные исходные файлы для случаев, когда конечный пользователь меняет, например, .jsf в URL на .xhtml в адресной строке браузера.Только инструментальные средства (IDE и плагины) и учебные ресурсы по-прежнему нуждаются в том, чтобы наверстать упущенное изменение с *.jsf на *.xhtml.Согласно JSF 2.3, FacesServlet по умолчанию будет автоматически регистрироваться также на *.xhtml (рядом с /faces/*, *.faces и *.jsf).Это перенесено в Mojarra 2.2.11.

См. Также:

...