0

我在 Tomcat 下工作过 JSF 应用程序。在我配置的同一个项目中,也使用 PHP,如 Caucho Resin 网站(链接)中所述

但是当我尝试将分离的 PHP 工作脚本包含到 JSG 页面中时,页面失败。

我有test.php

<?php
print "hello world";
?>

web.xml我添加了:

<servlet>
    <servlet-name>Quercus Servlet</servlet-name>
    <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
    <init-param>
        <param-name>license-directory</param-name>
        <param-value>WEB-INF/licenses</param-value>
    </init-param>
</servlet> 

<servlet-mapping>
    <servlet-name>Quercus Servlet</servlet-name>
    <url-pattern>*.php</url-pattern>
</servlet-mapping>

还添加resin.jarweb-inf/lib

当我test.php直接调用它时它正在工作,但是当我尝试像这样包含时:

<ui:include src="test.php"/>

或直接在 JSF 页面中编写 php 代码失败。

这是一个例外:

javax.faces.view.facelets.FaceletException: Error Parsing /test.php: Error Traced[line: 5] Premature end of file.
    at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:429)
    at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:403)
    at com.sun.faces.facelets.compiler.Compiler.compile(Compiler.java:124)
    at com.sun.faces.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:319)
    at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$100(DefaultFaceletFactory.java:92)

有没有人尝试过这种实验?

4

1 回答 1

1

当您直接调用您的 PHP 页面时,它正在由您的 Quercus Servlet 处理,完全没有问题。但是,当您调用包含在非 PHP 页面中的 PHP 页面时,例如 JSP(或 JSF 或 XHTML 或其他文件扩展名),您的 Quercus Servlet 不会处理它,因此会给您此错误。

您可以混合使用 Quercus Servlet 和/或 Faces Servlet 来解析页面(我没有对此进行测试,所以我不确定它是否会起作用)。另一种选择可能是不直接在您的 JSP/JSF 页面中使用 PHP 脚本,而是使用它们来处理操作,即<form action="test.php">.

请注意,这不是 JSF、Tomcat、Resin 或 Caucho 问题,而是 servlet 问题或更糟糕的设计问题。这就引出了一个问题:为什么要在 Web 应用程序中使用这种奇怪的设计?

于 2013-04-01T21:49:54.740 回答