0

我已经使用 Eclipse Indigo 和 Tomcat 7.0.32创建了一个 JSF 2.0 应用程序,如Eclipse 文档中所示。

在这个应用程序中,我有两个页面:

  1. 登录.xhtml
  2. 欢迎.xhtml

login.xhtml我导航到welcome.xhtml

我已经login.xhtml在我的web.xml.

  <welcome-file-list>
    <welcome-file>login.xhtml</welcome-file>
  </welcome-file-list>

并将 for 定义url-patternFaces Servlet

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

现在我有两个问题:

  1. 当我访问 URL 时,http://localhost:8080/LibraryInformationSystem/ 我可以看到登录页面,但登录后,当我导航到 welcome.xhtml 时,URL 变为http://localhost:8080/LibraryInformationSystem/login.xhtmlnot http://localhost:8080/LibraryInformationSystem/welcome.xhtml;但如果我手动浏览http://localhost:8080/LibraryInformationSystem/welcome.xhtml,它也会显示相同的内容。我的问题是为什么 URL 没有改变?这是定义默认页面的正确方法吗?我从另外两个 SO 线程中找到了信息,第一个在这里,第二个在这里
  2. 第二个问题是,当我从 Eclipse 运行应用程序并将应用程序启动到其内部浏览器时,我可以看到登录页面,但是如果我关闭从 Eclipse 运行的服务器并从批处理文件启动运行 Tomcat。 bat 位于 bin 文件夹中,并将应用程序导出为 war 文件并将其部署到 webapps 文件夹中,有时我可以看到登录页面,有时我会看到来自 Firefox 或 Chrome 的 Tomcat 的 HTTP 错误 - 404 页面。如果我关闭 startup.bat 并从 webapps 文件夹中删除 myapplication.war 和 myapplication 文件夹,然后再次从 startup.bat 启动服务器并再次从 Eclipse 导出 war 我可以看到登录页面,在这种情况下没有 404 错误. 为什么会这样?

任何指针都会对我很有帮助。

4

1 回答 1

1

关于第 1) 点,JSF 打破了 HTTP 语义。它应该使用 GET 来提供 的内容http://localhost:8080/LibraryInformationSystem/welcome.xhtml,但 JSF 使用 POST,因此 URL 不会更改。您可以执行 aPost-Redirect-Get来更新 URL,但这不是 JSF 默认的工作方式。

关于第 2 点,您应该避免在同一个 SO 问题中提出两个问题。

于 2012-11-18T18:27:21.330 回答