我在Tomcat下工作过JSF应用程序。在相同的项目中,我配置,也使用,PHP如Caucho Resin站点(Link)
所述但是当我尝试将分离的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)
有人做过这种实验吗?
当您直接调用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应用程序中使用如此奇怪的设计?