Java JSF:在ExternalContext中找不到资源异常

Java JSF:在ExternalContext中找不到资源异常,java,tomcat,jsf-2,Java,Tomcat,Jsf 2,我已经使用某种手工制作的JSP编写了现有的应用程序。它包含一个从处理所有请求的HttpServlet派生的类及其自己的HTML模板语言。我试图使用常见的JSF模板语法重写它。现在我正试图重写一组页面。因此,我做了以下工作: 我在web.xml中注册了新的servlet条目(class-javax.faces.webapp.FacesServlet,url模式-/jsp/*) 并将此代码放在旧的servlet类中: ExistingServlet::doGet(request, response)

我已经使用某种手工制作的JSP编写了现有的应用程序。它包含一个从处理所有请求的
HttpServlet
派生的类及其自己的HTML模板语言。我试图使用常见的JSF模板语法重写它。现在我正试图重写一组页面。因此,我做了以下工作: 我在web.xml中注册了新的servlet条目(class-
javax.faces.webapp.FacesServlet
,url模式-
/jsp/*
) 并将此代码放在旧的servlet类中:

ExistingServlet::doGet(request, response)
{
    // some old code
    if(page we are going to is my new page)
    {
        RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/myNewPage.xhtml");
        dispatcher.forward(request, response);

        return;
    }
}
但如果我进入本页,我会得到以下例外:

/在ExternalContext中找不到作为资源的myNewPage.xhtml

使用此调用堆栈(最后几行):


请告诉我这里出了什么问题。

当您将FacesServlet映射到URL模式
/jsp/*
,并访问页面
/jsp/myNewPage.xhtml
,关联的资源解析程序将尝试使用
外部上下文查找路径
/myNewPage.xhtml
的资源,依次是
ServletContext
对象


这意味着
myNewPage.xhtml
页面必须出现在
WebContent
中,否则将报告错误。通过推断,您必须将
myNewPage.xhtml
页面放在WebContent下,或者在servlet中使用
/jsp//myNewPage.xhtml
URL引用该页面,其中子目录路径引用WebContent目录下的目录路径。

当您将FacesServlet映射到URL模式
/jsp/*
,并访问页面
/jsp/myNewPage.xhtml
,关联的ResourceResolver将尝试使用
ExternalContext
ServletContext
对象查找路径为
/myNewPage.xhtml
的资源


这意味着
myNewPage.xhtml
页面必须出现在
WebContent
中,否则将报告错误。由此推断,您必须将
myNewPage.xhtml
页面放在WebContent下,或者在servlet中使用
/jsp//myNewPage.xhtml
URL引用该页面,其中子目录路径引用WebContent目录下的目录路径。

我不确定“WebContent”是什么意思。我正在使用netbeans7。在项目设置中,我将“网页文件夹”选项设置为“网页目录”。我的新页面位于“webpagesdir/jsp/myNewPage.xhtml”中。“WebContent”指的是web项目和WAR文件的根目录,其中包含web-INF目录和其他web资源。我相信,按照您配置Netbeans的方式,它将是“WebPages目录”。因此,您的myNewPage.xhtml文件应该被移动到“web pages dir”目录中/一些旧的HTMLdirs/嗯,我不确定您的注释是否格式正确,但是JSF不允许将JSP或Facelet放在WEB-INF目录中。如果您将Facelet放在WAR的公共可访问内容中,那么
myNewPage.xhtml
应该位于WAR的根目录中,而不是
/jsp
子目录中。我不知道如何在此处放置换行符。我的意思是WEb INF和my/jsp/dir处于同一级别,而不是一个包含在另一个级别中。我不确定“WebContent”是什么意思。我正在使用netbeans7。在项目设置中,我将“网页文件夹”选项设置为“网页目录”。我的新页面位于“webpagesdir/jsp/myNewPage.xhtml”中。“WebContent”指的是web项目和WAR文件的根目录,其中包含web-INF目录和其他web资源。我相信,按照您配置Netbeans的方式,它将是“WebPages目录”。因此,您的myNewPage.xhtml文件应该被移动到“web pages dir”目录中/一些旧的HTMLdirs/嗯,我不确定您的注释是否格式正确,但是JSF不允许将JSP或Facelet放在WEB-INF目录中。如果您将Facelet放在WAR的公共可访问内容中,那么
myNewPage.xhtml
应该位于WAR的根目录中,而不是
/jsp
子目录中。我不知道如何在此处放置换行符。我的意思是WEb INF和my/jsp/dir处于同一级别,而不是一个包含在另一个级别中。
at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:224)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:265)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:201)
at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:227)