首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么UnmappedResourceHandler需要用于JSF前缀模式的servlet映射?

为什么UnmappedResourceHandler需要用于JSF前缀模式的servlet映射?
EN

Stack Overflow用户
提问于 2014-08-16 14:24:47
回答 1查看 880关注 0票数 1

当我在JSF 2中浏览自定义资源处理程序时,我看到了无所不在的UnmappedResourceHandler。这是在帖子之后的Omnifaces中添加的。

我注意到,与Omnifaces提供的另外两个ResourceHandlers不同的是,Omnifaces提供了另外两个。CDNResourceHandlerCombinedResourceHandler,这里需要JSF前缀模式的附加映射:

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>

我不是JSF方面的专家,但我很想知道为什么只需要这种类型,而不需要其他两种呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-16 20:41:37

JSF资源也需要由FacesServlet提供。它负责在/resources文件夹中找到正确的文件,并与适当的缓存头一起重放。如果从资源URL中删除.xhtml扩展(或/faces路径),则该URL将不再与FacesServlet的URL模式匹配,因此不会调用FacesServlet,也无法完成为资源服务的工作。您只会得到一个404未找到的错误回来,因为“原始”资源URL不匹配的公共网页内容文件夹结构。

UnmappedResourceHandler利用了JSF具有由ResourceHandler.RESOURCE_IDENTIFIER标识的公共前缀路径/javax.faces.resource这一事实。因此,为了调用FacesServlet,即使没有.xhtml扩展(或/faces路径),也只需将/javax.faces.resource/* URL模式添加到映射中即可。

CDNResourceHandler不需要更改映射,因为它无论如何不会生成JSF资源URL,但是真正的CDN,比如指向jQuery或Google主机的URL。无论如何,这些URL都不会(需要)访问FacesServlet

CombinedResourceHandler只生成默认的JSF资源URL,带有.xhtml扩展(或/faces路径)。它只使用一个特殊的library名称omnifaces.combined,以便CombinedResourceHandler能够识别它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25341077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档