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