и затем я вижу, что ко всему, что происходит через FacesServlet, добавлен файл .xhtml, так что браузер запрашивает файлы .png.xhtml, файл .css.xhtml - это правильно?
Это относится только к ресурсам, включенным в <h:outputStylesheet>
и <h:outputScript>
. не связано с изменением в отображении URL.Это связано с переходом с JSF 1.x на JSF 2.x и переходом с <link rel="stylesheet">
и <script>
на вышеупомянутые теги JSF2.
Для ваших собственных сценариев,Таблицы стилей и другие статические материалы, которые должны обслуживаться из общедоступного веб-контента, , а не должны вручную добавлять расширение .xhtml
.Вам не нужно ничего менять в отношении существующих статических ресурсов.
Только для фоновых изображений CSS и других ссылок url()
в файлах CSS, которые должны быть включены с использованием <h:outputStylesheet>
тег (и, следовательно, не для <link rel="stylesheet>
), вам нужно изменить местоположение url()
для динамического разрешения EL.Вместо этого вам нужно будет использовать следующий синтаксис:
body {
background-image: url("#{resource['libraryname:path/to/image.png']}");
}
Представьте, что у вас следующая структура папок /resources
:
WebContent
|-- META-INF
|-- resources
| `-- default
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
и вы включаете style.css
в test.xhtml
следующим образом
<h:outputStylesheet library="default" name="css/style.css" />
, тогда вы должны определить URL фонового изображения следующим образом
body {
background-image: url("#{resource['default:images/background.png']}");
}
или , если вы полагаетесь на значение по умолчаниюбиблиотека, таким образом, вы не используете library
, тогда она должна выглядеть так:
WebContent
|-- META-INF
|-- resources
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
test.xhtml
:
<h:outputStylesheet name="css/style.css" />
style.css
:
body {
background-image: url("#{resource['images/background.png']}");
}
Что касается ограничения безопасности, то оно не необходимо, когда вы уже используете отображение *.xhtml
.Ограничение безопасности предназначено для предотвращения просмотра конечным пользователем необработанного исходного кода XHTML, когда FacesServlet
сопоставляется с шаблоном, отличным от *.xhtml
.Конечный пользователь сможет увидеть исходный код XHTML, просто удалив часть /faces
из URL в случае сопоставления /faces/*
или переименовав .jsf
в .xhtml
в случае сопоставления *.jsf
.Избавьтесь от ограничений безопасности, в вашем случае ситуация ухудшится, так как вы уже используете отображение *.xhtml
, которое делает невозможным просмотр исходного исходного кода XHTML путем взлома URL.