Bob*_*Bob 9 eclipse jsf tomcat homescreen welcome-file
当我使用Eclipse中的Tomcat 8.0启动Java EE项目时,我无法设置在浏览器中加载的默认页面.我正在尝试学习JSF,所以我遵循了本教程
一切正常,但是当我右键单击login.xhtml或welcome.xhtml文件并选择"在服务器上运行/运行" 时,我只能看到创建的页面.
到目前为止,我创建的所有其他Web应用程序在我启动整个项目时都加载了默认页面.默认行为是加载index.html页面(如果有的话,可能是index.jsp).所以我添加index.html和index.xhtml页面到我的WEB-INF项目文件夹,希望其中至少有一个将被显示.然而,没有任何反应.浏览器始终只显示localhost:8080/JSFFaceletsTutorial/URL 上的页面,但页面是白色的,甚至不是错误消息.我想我一直在解决这个问题的过程中遇到错误404,但是,我不再能够重现这个错误,我不记得是什么导致了它.
我发现可以更改默认的起始页面
但是,它对我也不起作用.无论我是否编辑web.xml文件,我都得到相同的结果.
更令人费解的是,当我尝试更改网络浏览器时:"窗口/网络浏览器/ ..."它在外部网络浏览器中的作用时间与内部Eclipse网络浏览器不同.内部总是空白页面 - 但外部网络浏览器曾经设法显示index.html页面 - 但它是一些过时的版本.尽管我完全确定我编辑了它,保存了更改,重新启动了服务器......但它仍然显示了页面的过时版本.即使在这种情况下,它仍然忽略了web.xml文件中所做的更改.但是当我现在尝试它时,它再次在所有浏览器中显示空白页面.除了编辑web.xml文件外,我不知道我做了什么改变......
我的猜测是问题在于我还没有完全掌握的JSF技术.这是因为当我选择使用右键单击"运行方式/在服务器上运行" 来运行login.xhtml和welcome.xhtml页面时,这些页面的URL将显示localhost:8080:路径/JSFFaceletsTutorial/faces/login.xhtml和/JSFFaceletsTutorial/faces/welcome.xhtml.这很奇怪,因为我的项目中没有任何目录"faces".键入所有可能的排列:
<welcome-file-list>
<welcome-file>faces/index.html</welcome-file>
<welcome-file>faces/index.xhtm</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
在这web.xml也没有帮助.当我在那里输入完整地址时,它没有帮助.
以下是我在控制台中收到的警告(我跳过了INFO日志条目):
"2014年12月19日上午9:39:55 org.apache.tomcat.util.digester.SetPropertiesRule开始警告:[SetPropertiesRule] {Server/Service/Engine/Host/Context}将属性'source'设置为'org.eclipse. jst.jee.server:JSFFaceletsTutorial'找不到匹配的属性....警告:JSF1074:已经注册了名为'loginBean'的托管bean.用com.tutorial.LoginBean替换现有的托管bean类com.tutorial.LoginBean .2014年12月19日上午9:39:57 org.apache.coyote.AbstractProtocol start"
我不确定这是否有用.我现在没有想法了.
Bal*_*usC 14
首先,它<welcome-file>不代表"默认主页"的路径.它代表包含您希望担任了作为默认的文件时,文件夹中的物理文件的文件名的文件夹一样/,/foo/,/foo/bar/,请求等.
所以,在JSF 2.x风格中,基本上是:
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
这样,如果最终用户请求/您/index.xhtml,那么它将被提供.或者,如果最终用户请求/foo并且您有/foo/index.xhtml,则将提供服务,等等.如果没有此类文件,则将返回404错误.
现在,您似乎已将您FacesServlet的前缀映射<url-pattern>到/faces/*.这是JSF 1.0/1.1时代的遗留物,这些天真的不推荐.也许您正在阅读针对JSF 1.x的过时教程,或者是一个维护不良的教程,该教程最初是为JSF 1.x编写的,然后针对JSF 2.x进行了无法更新,而不是从头开始重写.
该教程似乎也没有向您解释一些servlet基础知识.也就是说,为了使XHTML页面中的JSF组件运行并生成一些HTML输出,FacesServlet必须在请求XHTML页面时调用它.当您像这样请求XHTML页面/index.xhtml时,FacesServlet在映射时/faces/*,它将不会被调用.然后,浏览器将检索原始未解析的JSF源代码,而不是生成的HTML输出.你可以通过右键单击webbrowser中的View Source来查看它.您应该已经请求了这样的页面,/faces/index.xhtml以便FacesServlet可以运行并生成浏览器可以理解和呈现的HTML输出.
这与欢迎文件不能很好地结合在一起.这完全解释了为什么在使用index.xhtml欢迎文件时会得到一个"干净的白色"(空白)页面(因为包含原始XHTML源代码的响应中包含缺少/错误的内容类型,因此像IE这样的低级web浏览器会混淆地提示下载对话框).该FacesServlet是根本就没有被调用.只需摆脱旧式/faces/*URL模式并使用JSF 2.x意识到的*.xhtmlURL模式.
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这样欢迎文件应该可以工作,您只需直接请求其物理URL即可打开JSF页面,而无需使用虚拟URL.这在JSF 1.x中是不可能的,因为它会让FacesServlet运行在无限循环中调用自身并导致堆栈溢出.
至于那些警告,它们是无关的,但相当可观.
| 归档时间: |
|
| 查看次数: |
20515 次 |
| 最近记录: |