0

我注意到在 InternetExplorer 和 Chrome 中加载我的页面最多会触发 3 次 JSF 生命周期,因为触发了多个 HTTP 请求。然而,我的调试输出仅出现在第一个生命周期中。(对于 Firefox,只有一个生命周期)

由于问题在 Firefox 中不存在,我认为这不是服务器端问题(例如,附加一个 phaselistener 2 次可能是一个)

因此,Chrome 和 IE 需要进行一些调用,这些调用会导致对某些实际上不需要的服务器资源的请求。

最大的问题是:什么样的组件/标签可能会导致另一个 HTTP 请求,为什么它在没有这些额外请求的情况下在 Firefox 中工作?我读到没有 url 属性的图像标签可能会导致这种行为,因为浏览器再次请求索引文件。然而,Chrome 的网络诊断不会显示任何无效图像,也不会显示对其中一个 xhtml 站点的双重请求。

IE-示例:

13:56:14,046 INFO  [stdout] (http--0.0.0.0-8090-18) -- Started Request --
13:56:14,046 INFO  [stdout] (http--0.0.0.0-8090-18) ---- Started RESTORE_VIEW 1 ----
13:56:14,048 INFO  [stdout] (http--0.0.0.0-8090-18) ---- Started RENDER_RESPONSE 6 ----
13:56:14,100 INFO  [stdout] (http--0.0.0.0-8090-18) xybean constructed
13:56:14,712 INFO  [stdout] (http--0.0.0.0-8090-18) -- Finished Request --
13:56:15,106 INFO  [stdout] (http--0.0.0.0-8090-10) -- Started Request --
13:56:15,106 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started RESTORE_VIEW 1 ----
13:56:15,108 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started APPLY_REQUEST_VALUES 2 ----
13:56:15,110 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started PROCESS_VALIDATIONS 3 ----
13:56:15,111 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started UPDATE_MODEL_VALUES 4 ----
13:56:15,112 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started INVOKE_APPLICATION 5 ----
13:56:15,114 INFO  [stdout] (http--0.0.0.0-8090-10) ---- Started RENDER_RESPONSE 6 ----
13:56:15,115 INFO  [stdout] (http--0.0.0.0-8090-10) -- Finished Request --

Firefox 中的相同页面调用:

14:03:33,443 INFO  [stdout] (http--0.0.0.0-8090-2) -- Started Request --
14:03:33,443 INFO  [stdout] (http--0.0.0.0-8090-2) ---- Started RESTORE_VIEW 1 ----
14:03:33,444 INFO  [stdout] (http--0.0.0.0-8090-2) ---- Started RENDER_RESPONSE 6 ----
14:03:33,496 INFO  [stdout] (http--0.0.0.0-8090-2) xybean constructed
14:03:34,258 INFO  [stdout] (http--0.0.0.0-8090-2) -- Finished Request --
4

1 回答 1

1

解决方案非常简单:

我宣布了 2 个网站图标:

<!-- For Modern Browsers -->
<link rel="shortcut icon" href="./img/favicons/favicon.png" />

<!-- For everything else -->
<link rel="shortcut icon" href="./img/favicons/favicon.ico" />

在 web.xml 中,我声明了我的 servlet 映射,如下所示:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

因此,IE 和 Chrome 一直在寻找http://localhost/myApp/faces/img/favicons/favicon.png并通过这样做来调用 servlet。将 favicon 更改为绝对 url(将面放在外面)解决​​了这个问题。

也许将 Faces Servlet 的 url 模式更改为更具体的东西*.xhtml或您想要调用它的任何文件类型也是一个好主意。

于 2013-01-29T14:28:30.327 回答