我创建了一个带有EJB和war模块的企业应用程序。我在Web页面文件夹中添加了一些XHTML文件,如下所示:
Web Pages
WEB-INF
web.xml
protected
testNavigation2.xhtml
testNavigation.xhtml
我还使用url-pattern * .xhtml配置了Faces Servlet。
部署了我的应用程序后,我可以毫无问题地访问URL:host/projectname/testNavigation.xhtml
。显示testNavigation.xhtml
文件。
但我无法访问:host/projectname/protected/testNavigation2.xhtml
。使用该URL会产生:
HTTP状态404 - 找不到/protected/testNavigation2.xhtml ExternalContext作为资源
服务器控制台(我使用Glassfish 4.1)报告:
警告:来自ServletContext的上下文路径:/ meteocal-project-war 不同于捆绑的路径:meteocal-project-war警告:
JSF1064:无法找到或提供资源, /protected/testNavigation2.xhtml。
如何从子文件夹中访问xhtml文件?我对此做了很多研究,并从我所读到的行为来判断我的实验似乎很奇怪。
我不认为这是必要的,但我会发布web.xml的内容,以防我错了:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>protected/testNavigation2.xhtml</welcome-file>
</welcome-file-list>
</web-app>
感谢您的关注, 我非常感谢你能给予的任何帮助
答案 0 :(得分:1)
Tiny在评论中发表了这个答案。我在此报告将其标记为答案。
您可能忘记在创建名为protected的文件夹后部署应用程序,该文件夹具有应用程序根目录下的XHTML文件 - testNavigation2.xhtml。从头开始重新部署应用程序。
每当您在应用程序中创建文件夹时,NetBeans基本上都需要进行硬部署。如果在进行硬部署之后发生这种情况,请扫描操作系统上的文件系统,以查看是否存在名为protected的文件夹,其中已部署的WAR文件中包含所述XHTML文件。症状基本上只是新创建的文件夹保护自身以及提到的XHTML文件在部署的WAR文件中不可用。
by Tiny