如何将PHP脚本包含在tomcat或resin下的JSF页面中?

时间:2013-04-01 21:35:02

标签: php jsf tomcat resin caucho

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

但是当我尝试将分离的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.jar添加到web-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)

有人试过这种实验吗?

1 个答案:

答案 0 :(得分: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问题或更糟糕的设计问题。这引出了一个问题:为什么你想在你的网络应用程序中想要这么奇怪的设计?