在同一个文档中执行PHP和JSP?

时间:2014-08-11 18:02:25

标签: php xml jsp tomcat

我遇到了一个特定的情况,我需要能够在同一个文档中执行php和jsp。我有一个tomcat服务器设置,正确配置了java网桥from here。一个.php文件本身运行正常,.jsp文档正常运行,但合并后,我得到一个或另一个。

我尝试将.jsp扩展名添加到php javabridge servlet映射:

<servlet-mapping>
    <servlet-name>PhpCGIServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

但这导致只在.jsp文件中执行php。我已经尝试将.php添加到jsp servlet映射

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

但这导致只在.jsp文件中执行php。有没有办法让php和jsp同时存在于同一个文件中,让它们同时运行?下面是我的代码示例。请不要建议更改代码,因为这只是一个示例,因为我要测试的内容需要这两个代码才能在同一个文档中工作。我愿意接受“这是不可能的”的回答,但不是在用尽所有其他选择之前。

<?php
$value = 'this_is_the_cookie';
setcookie("TestCookie", $value);
?><%@ page language="java" contentType="text/xml" import="javax.xml.parsers.DocumentBuilder, javax.xml.parsers.DocumentBuilderFactory, org.w3c.dom.Document,org.w3c.dom.Element,org.w3c.dom.Node,org.w3c.dom.NodeList,java.io.*,java.util.*,org.voicexml.conformance.testharness.*" %><?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";?>
<callxml version="3.0"> 

<assign var="startTime" expr="time()"/>
<%!
    public String setDefault(String foo, String defValue)
    {
        if(foo == null)
        {
            return defValue;
        }
        else
        return foo;
    }

    String defValue = "0000";
    String testCaseID = request.getParameter("testcaseid");
    testCaseID = setDefault(testCaseID, defValue);
%>
<assign var="session.testCaseID"  value="<%=testCaseID%>"/>
<do label="B1">

    <prompt>
      CallXML Parent application.
    </prompt>

    <goto value="https://127.0.0.1:8888/MAMP/CallXML1.php"/>

</do>
</callxml> 

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

Java中的过滤器和普通的jsp怎么样?反之亦然。

答案 1 :(得分:0)

如果要将PHP添加到现有Web应用程序中,则需要将代码直接添加到您的WEB-INF/web.xml配置文件和所需的库(JavaBridge.jar, php-servlet.jar)到WEB-INF / lib中夹。检查您是否安装了php,然后将以下java参数-Dphp.java.bridge.php_exec=<location_of_php_bin>/php添加到catalina.sh or catalina.bat

<listener>
    <listener-class>php.java.servlet.ContextLoaderListener
    </listener-class>
</listener>
<servlet>
    <servlet-name>PhpJavaServlet</servlet-name>
    <servlet-class>php.java.servlet.PhpJavaServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>PhpCGIServlet</servlet-name>
    <servlet-class>php.java.servlet.fastcgi.FastCGIServlet</servlet-class>
    <init-param>
        <param-name>prefer_system_php_exec</param-name>
        <param-value>On</param-value>
    </init-param>
    <init-param>
        <param-name>php_include_java</param-name>
        <param-value>Off</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>PhpJavaServlet</servlet-name>
    <url-pattern>*.phpjavabridge</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>PhpCGIServlet</servlet-name>
    <url-pattern>*.php</url-pattern>
</servlet-mapping>

答案 2 :(得分:0)

尝试将JSP包含在PHP中。它就像一个普通的包括。