Java JSF:在ExternalContext中找不到资源异常
我已经使用某种手工制作的JSP编写了现有的应用程序。它包含一个从处理所有请求的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)
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)