【问题标题】:Execute both PHP and JSP in the same document?在同一个文档中同时执行 PHP 和 JSP?
【发布时间】:2014-10-04 15:41:57
【问题描述】:

我遇到了一个特定的情况,当它们在同一个文档中时,我需要能够同时执行 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> 

提前感谢您的帮助!

【问题讨论】:

    标签: php xml jsp tomcat


    【解决方案1】:

    尝试将 JSP 包含到 PHP 中。这就像一个普通的包含。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我这样做了,就像原来的问题说的那样,这增​​加了向 tomcat 运行 php 文件的能力,但没有增加同时运行 php 和 jsp 的能力,从同一份文件。
      • 是的,我已经安装了 php。就像我说的,当我向应用程序添加一个 php 文件时,php 执行得非常好。 php代码的运行不是问题。服务器没有同时运行同一文档中的 php 和 jsp。
      • 我能想到的解决方案是将 JSP 代码分离,然后尝试将其从您的 PHP 中包含进来,例如 &lt;?include('http://my_web_url/myjava.jsp'); 我知道您不想这样做,但这就是我想要的解决方案暂时能想到。
      • 如果我做了一个包含,我将如何从 url 中获取参数?如果 jsp 不是直接从 url 启动的,那么 String testCaseID = request.getParameter("testcaseid"); 是否仍然有效?
      • 基本上在你完成更新 testCaseID 之后,只需将它放回会话并从你的 PHP 中,你可以尝试像使用会话命令一样访问它 (i.e. $_REQUEST['testcaseid'])
      【解决方案3】:

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

      【讨论】:

      • 我不确定你的意思,你能举个例子或更详细的吗?
      • 此链接将为您提供所有详细信息:oracle.com/technetwork/java/filters-137243.html 但基本上,对于您的情况:您可以在 java 中编写过滤器,该过滤器将响应您指向过滤器的任何 url。完成后,将执行php代码。
      • 我不认为这对我有用,因为它不允许我将 jsp 的输出分配给 xml 中的变量,如下所示:&lt;assign var="session.testCaseID" value="&lt;%=testCaseID%&gt;"/&gt;
      • 是的,你可以。 php 完成处理后,解析输出并将“”替换为该变量的值。这很可怕,但它会起作用。
      • 我想我不会在没有某种例子的情况下跟随,而且我似乎找不到这样做的例子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多