Ответ 1
Шаблон URL-адресов страниц JSF указан <servlet-mapping>
FacesServlet
в web.xml
. Поскольку вы упомянули, что .xhtml
работает нормально, вы, по-видимому, настроили его следующим образом:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Вам нужно изменить <url-pattern>
, чтобы получить желаемое расширение виртуального URL.
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Это все, что вам нужно изменить для достижения конкретного функционального требования, действительно.
Однако, это создает проблему безопасности. Теперь конечный пользователь может увидеть исходный код исходного файла Facelets при изменении расширения в URL-адресе от .jsf
до .xhtml
. Это можно предотвратить, добавив следующее ограничение безопасности на web.xml
:
<security-constraint>
<display-name>Restrict access to Facelets source code.</display-name>
<web-resource-collection>
<web-resource-name>Facelets</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>