JSP - это старая технология просмотра, широко используемая в сочетании с JSF 1.x. Facelets (некоторые люди, обобщенно обозначенные как 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. Если вы знакомы с базовыми Сервлетами , тогда вы должны знать, что 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. .
Смотри также: