当文件在文件夹中时,java.io.FileNotFoundException

时间:2012-07-13 20:24:17

标签: jsf file-io jsf-2 filenotfoundexception

我使用JF 2.0创建了项目。

当我运行项目时,我可以通过说xyz.xhtml

来执行文件http://localhost:8080/myProject/faces/xyz.xhtml

但是当我将其放在文件夹xyz中并尝试以http://localhost:8080/myProject/faces/xyz/xyz.xhtml执行时,我会将java.io.FileNotFoundException作为例外。

堆栈跟踪的前几行是

java.io.FileNotFoundException
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:403)
at com.sun.faces.facelets.impl.DefaultFaceletCache._getLastModified(DefaultFaceletCache.java:172)
at com.sun.faces.facelets.impl.DefaultFaceletCache.access$000(DefaultFaceletCache.java:62)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:82)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:78)
at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

有人能指出我做错了吗?

更新1

我的文件结构是

+ Web Content
  + WEB-INF
    - web.xml
    - faces-config.xml
  + xyz
    - xyz.xhtml
  - xyz.xhtml

2 个答案:

答案 0 :(得分:0)

也许你有像这样的第一个文件夹结构

+ Web Content
  - xyz.xhtml
  + xyz
    - xyz.xhtml

Faces Servlet的servlet映射配置如下所示:

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

这意味着Faces Servlet(将请求发送到JSF框架的servlet)将应用于ProjectName / faces /&lt; whatever&gt;内的每个页面。 (当且仅当页面位于面部文件夹结构下时)。如果要为站点中的每个html页面应用Faces Servlet,请将配置更改为:

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

修改

我根据你的问题做了一个测试。它应该没有任何问题。确保项目已正确构建且已正确部署,如果仍有这些问题,请尝试更改servlet映射配置。

答案 1 :(得分:0)

问题出在xyz.xhtml:它使用相对路径而不是绝对路径引用资源(模板?include?) - 当你将其向下移动到引用不再有效的目录时