jsf 2.0 上的 JSF1064“无法找到或提供资源”警告

Posted

技术标签:

【中文标题】jsf 2.0 上的 JSF1064“无法找到或提供资源”警告【英文标题】:JSF1064 "Unable to find or serve resource" warning on jsf 2.0 【发布时间】:2011-12-23 19:11:04 【问题描述】:

我正在 Weblogic 10.3.3 上使用 Java EE 5 和 JSF 2.0 (Mojarra 2.0.3) 开发企业项目

我没有错误,但是当我浏览我的应用程序时,我的控制台中有一个非常烦人的警告。

每当我在 JSF 中执行重定向时,我都会在控制台中收到如下形式的警告:

Nov 7, 2011 5:36:46 PM com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNING: JSF1064: Unable to find or serve resource, images/jquery-theme/ui-icons_cc0000_256x240.png.
Nov 7, 2011 5:36:46 PM com.sun.faces.application.resource.ResourceHandlerImpl logMissingResource
WARNING: 
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:507)
    at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:486)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:382)
    at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:580)
    at weblogic.servlet.internal.ChunkOutput.write(ChunkOutput.java:306)
    at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:146)
    at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:138)
    at java.nio.channels.Channels$WritableByteChannelImpl.write(Channels.java:275)
    at com.sun.faces.application.resource.ResourceHandlerImpl.handleResourceRequest(ResourceHandlerImpl.java:277)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)

但在我的应用程序中,资源显示正确。当图像加载没有问题时,我不知道为什么会显示此警告。我在icefaces 论坛上读到它可能与<h:outputScript/><h:outputStylesheet/> 标签有关。

这是我对这些标签的使用:

<h:outputStylesheet name="jquery-theme/jquery-ui-1.8.16.custom.css" library="css"/>

<h:outputScript name="jquery-ui-1.8.16.custom.min.js" library="js"/>

这些文件分别位于src/main/resources/csssrc/main/resources/js 文件夹中,并且再次正确加载并在页面的源代码中可见。我只想在我的控制台中摆脱这些警告。

【问题讨论】:

【参考方案1】:

java.net.SocketException:软件导致连接中止:套接字写入错误

资源仍在忙于下载时,连接被中止。例如,当您导航到不同的页面、按下 Esc 或在浏览器仍在忙于下载所有资源时关闭浏览器窗口时,可能会发生这种情况。

我检查了 Mojarra 源代码并在 ResourceHandlerImpl#handleResourceRequest() 中看到以下内容(Mojarra 2.1.3 中的第 292-294 行):

 catch (IOException ioe) 
    send404(context, resourceName, libraryName, ioe, true);

因此,写入响应时的IOException 被捕获并强制处理为404。就个人而言,这应该被throws IOException 忽略或委托给servletcontainer,而不是强制转换为HTTP 404 错误。

我已将此事报告为 issue 2245 Mojarra 伙计们。在那之前,你不能对它做太多的事情,但最好知道当javax.faces.PROJECT_STAGE 设置为Production 而不是Development 时不会记录这些警告。相反,它将被记录为FINE

【讨论】:

这个image 或许可以帮助您更多地找出问题所在。此外,这仅在 IE9 中发生,而不在 Chrome 中发生(不了解其他浏览器)......图像中标记为“中止”的请求是导致警告的请求...... 我仍然看到它被记录在 PROJECT_STAGE 设置为生产

以上是关于jsf 2.0 上的 JSF1064“无法找到或提供资源”警告的主要内容,如果未能解决你的问题,请参考以下文章

JSF1064:找不到资源!只有当我在 Firefox 中使用我的项目时

JSF 2.0 有比 Icefaces 更好的 Ajax Push

向 JSF 2.0 UIInput 组件添加自定义属性 (HTML5) 支持

如何创建模块化 JSF 2.0 应用程序?

jsf 1.2和jsf 2.0之间的区别

从 JSF 1.2 迁移到 JSF 2.0 后,每次导航都出现 ViewExpiredException