Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets 为什么UnmappedResourceHandler需要JSF资源URL前缀模式的servlet映射?_Servlets_Jsf 2_Omnifaces_Unmappedresourcehandler - Fatal编程技术网

Servlets 为什么UnmappedResourceHandler需要JSF资源URL前缀模式的servlet映射?

Servlets 为什么UnmappedResourceHandler需要JSF资源URL前缀模式的servlet映射?,servlets,jsf-2,omnifaces,unmappedresourcehandler,Servlets,Jsf 2,Omnifaces,Unmappedresourcehandler,我在浏览JSF2中的自定义资源处理程序时,遇到了omnifaces。这是在发布后的Omnifaces中添加的 我注意到,与Omnifaces提供的其他两个ResourceHandler不同,Omnifaces提供了vizCDNResourceHandler和CombinedResourceHandler,这需要JSF资源URL前缀模式的额外映射: <servlet-mapping> <servlet-name>facesServlet</servlet-na

我在浏览JSF2中的自定义资源处理程序时,遇到了omnifaces。这是在发布后的Omnifaces中添加的

我注意到,与Omnifaces提供的其他两个ResourceHandler不同,Omnifaces提供了viz
CDNResourceHandler
CombinedResourceHandler
,这需要JSF资源URL前缀模式的额外映射:

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>

小脸蛋
*.xhtml
/javax.faces.resource/*

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

JSF资源也需要由
FacesServlet提供服务。它负责在
/resources
文件夹中定位正确的文件,并将其与适当的缓存头一起重试。如果从资源URL中删除
.xhtml
扩展名(或
/faces
路径),则URL将不再与
FacesServlet
的URL模式匹配,因此
FacesServlet
将不会被调用,也将无法完成其服务资源的工作。由于“原始”资源URL与公共webcontent文件夹结构不匹配,因此您只能返回404 Not Found错误

UnmappedResourceHandler
利用了JSF资源URL有一个公共前缀路径
/javax.faces.resource
,由标识。因此,为了无论如何调用
FacesServlet
,即使没有
.xhtml
扩展名(或
/faces
路径),您只需要将
/javax.faces.resource/*
URL模式添加到映射中

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

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