JSF Facelets: Иногда я вижу URL-адрес .jsf и иногда .xhtml. Зачем?

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

Ответ 1

Расширение .jsf, где FacesServlet часто по умолчанию отображается в web.xml.

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

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

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

Иногда используется расширение *.faces или /faces/* foldermapping. Но это происходило со времен 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.

См. также: