我在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)
有人试过这种实验吗?
答案 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问题或更糟糕的设计问题。这引出了一个问题:为什么你想在你的网络应用程序中想要这么奇怪的设计?