我多年来一直使用前缀映射,但决定切换到后缀映射,只是为了从url中去掉/faces
。在深入之前,我只是想确认我正在朝着正确的方向走,因为有一些意外情况发生。我从以下内容进行了更改:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
变成这样:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
我看到所有通过FacesServlet
的内容都加上了.xhtml
,所以浏览器请求的是background.png.xhtml
和style.css.xhtml
文件,这是正确的吗?我想这被称为后缀映射,但我认为它看起来有点不整洁,我试图说服自己这是正确的做法。
在我的CSS文件中,当引用URI时也必须添加.xhtml
:
background-image: url(images/background.png.xhtml);
然后我看到了BalusC的一篇帖子,提供了一个解决方案,可以防止在不经过FacesServlet的情况下下载资源:
<security-constraint>
<display-name>Restrict raw XHTML docs</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
只有当我添加这个后,页面上才会加载真正的 .xhtml
文件,所有其他资源(尽管已添加了.xhtml
)都不显示。
我想知道的是:
把
.xhtml
添加到所有内容中是否正常(如果这是最愚蠢的问题,请原谅我)为什么“限制原始xhtml文档”的安全约束会阻止CSS、JavaScript和图像等资源的加载?
感谢任何反馈。我正在 Glassfish 3.1 上使用 Mojarra 2.1.2。